2015-06-22 14 views
7

Sono un programmatore C# molto nuovo, meno di ~ 24 ore effettive di digitazione/programmazione non elaborata. Direi comunque circa una settimana di leggere, guardare e cercare di capire le cose.Risolve il futuro codice problematico?

Ecco il codice sorgente per il mio primo programma:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Bugcheck 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     // Initializing variables 
     string bugcheckExit = "exit"; 
     var message = ""; 
     var afterMessage = "Type another bug check, or \"exit\" to quit:\n"; 
     Console.BackgroundColor = ConsoleColor.Blue; 
     Console.Clear(); 

     // Write welcome message to screen 
     Console.WriteLine("Type a bug check code (for example - 0xD1), or \"exit\" to quit:\n"); 

     while (true) 
     {    

      // Take in user input 
      string userInput = Console.ReadLine().ToLower(); 

      // Check user input 
      if (userInput == bugcheckExit) 
       System.Environment.Exit(1); 

      // Checking value of bug check 
      if (userInput == "0xd1") 
       message = "DRIVER_IRQL_NOT_LESS_OR_EQUAL\n" + 
        "This indicates that a kernel-mode driver attempted to access pageable memory at\n" + 
        "a process IRQL that was too high.\n"; 
      else if (userInput == "0xa") 
       message = "IRQL_NOT_LESS_OR_EQUAL\n" + 
        "This indicates that Microsoft Windows or a kernel-mode driver accessed\n" + 
        "paged memory at DISPATCH_LEVEL or above.\n"; 
      else if (userInput == "0x1e") 
       message = "KMODE_EXCEPTION_NOT_HANDLED\n" + 
        "This indicates that a kernel-mode program generated an exception which the\n" + 
        "error handler did not catch.\n"; 
      else 
       message = "Not a valid bug check, please try again.\n"; 

      Console.WriteLine(message); 
      Console.WriteLine(afterMessage); 
     } 
    } 
} 
} 

Il programma fa esattamente quello che voglio io. L'utente digita il codice di controllo bug che sta ottenendo, riprende la definizione MSDN-MSFT di base e chiede di digitare un altro codice di controllo bug o uscire per uscire dal programma.

Tuttavia, in base ai materiali video/di lettura, una cosa importante da imparare è come individuare il codice che sarà un problema in futuro. Bene, almeno dal mio punto di vista, il metodo in cui sto usando per verificare il valore dell'input dell'utente riguardo il controllo degli errori non è potenzialmente buono, perché alla fine sarà modo troppo grande e disordinato dato il numero di bug controlla ci sono.

Così ho fatto qualche ricerca e ho scoperto i dizionari, in ordine. Sono arrivato fino a questo:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Dictionary 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string value = ""; 
     Dictionary<string, string> openWith = new Dictionary<string, string> 

{ 
    { "0xa", "This indicates that Microsoft Windows or a kernel-mode driver accessed\n" + 
      "paged memory at DISPATCH_LEVEL or above.\n" }, 
    { "0xd1", "This indicates that a kernel-mode driver attempted to access pageable memory at\n" + 
      "a process IRQL that was too high.\n" } 
}; 

      if (openWith.TryGetValue("0xd1", out value)) 
      { 
       Console.WriteLine(value); 
      } 
      else 
      { 
       Console.WriteLine(" is not found"); 
      } 
      Console.ReadLine(); 
    } 
} 
} 

Ora la domanda a me stesso per tutto il tempo è stato "Come diavolo faccio a implementare questo nel mio codice attuale?", E io ancora non so davvero che mi vergogno a dire. Ho provato a cercare e cercare di creare/gestire nuove Classi e, sebbene fosse un po 'di confusione, ne ho avuto l'idea di base e ho scritto un programma rapido che non richiede l'input dell'utente, ma invece stampa sulla console :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace GPU 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     GPU myNewGPU = new GPU(); 

     myNewGPU.Make = "nVidia"; 
     myNewGPU.Model = "GTX 970"; 
     myNewGPU.Year = 2014; 
     myNewGPU.Color = "Black"; 

     Console.WriteLine("{0} - {1} - {2}", 
      myNewGPU.Make, 
      myNewGPU.Model, 
      myNewGPU.Color); 

     Console.WriteLine("GPU's value: {0:G}", myNewGPU.DetermineMarketValue()); 

     Console.ReadLine(); 
    } 
} 

class GPU 
{ 
    public string Make { get; set; } 
    public string Model { get; set; } 
    public int Year { get; set; } 
    public string Color { get; set; } 

    public double DetermineMarketValue() 
    { 
     double GPUValue = 100.0; 

     if (this.Year > 2010) 
      GPUValue = 400.0; 
     else 
      GPUValue = 100.0; 

     return GPUValue; 
    } 
} 

} 

Così ho sorta di capire le basi di dizionari e le classi, ma non ho ancora idea di come implementare il/un metodo migliore nel mio attuale programma "controllo bug".

Qualche consiglio, suggerimenti? Ho cercato di rendere il mio post per dimostrare che stavo cercando il più possibile di capirlo da solo perché so che StackOverflow aggrotta le sopracciglia sulle persone che cercano di convincere gli altri a codificarsi per loro, non so dove altro guardare/leggere per capirlo, o almeno come farlo nella giusta direzione.

+0

questo è un po 'dappertutto. Non sei sicuro di quale sia l'ultimo terzo riguardo alle classi personalizzate. Vuoi implementare il tuo dizionario nel tuo codice già funzionante? Che problemi avevi? – Jonesopolis

+1

Mentre io (e probabilmente anche il resto di noi) apprezzo davvero quanto impegno ci sia stato in questo, abbiamo bisogno di una domanda specifica. È come usare i dizionari? Come rifattorizzare il codice esistente per utilizzare i dizionari? Dio non voglia, dove trovare un tutorial? –

+0

Scusa amico, la terza (classi personalizzate) è lì perché pensavo di aver bisogno di capire le classi per implementare i dizionari nel mio codice già funzionante.Il problema principale che sto avendo è (ripetendomi qui) alla fine non ho idea di come implementare i dizionari degli strumenti nel mio codice già funzionante. – ajdbnabad13

risposta

3

Ecco una semplice implementazione del dizionario:

static void Main(string[] args) 
    { 
     Dictionary<string, string> openWith = new Dictionary<string, string> 
     { 
      { "0xa", "This indicates that Microsoft Windows or a kernel-mode driver accessed\n" + 
        "paged memory at DISPATCH_LEVEL or above.\n" }, 
      { "0xd1", "This indicates that a kernel-mode driver attempted to access pageable memory at\n" + 
        "a process IRQL that was too high.\n" } 
     }; 

     string userInput = ""; 
     while ((userInput = Console.ReadLine().ToLower()) != "exit") 
     {     

      if (openWith.ContainsKey(userInput)) 
       Console.WriteLine(openWith[userInput]); 
      else 
       Console.WriteLine("Doesn't exist"); 

      Console.WriteLine("Type another bug check, or \"exit\" to quit:\n"); 
     } 
    } 

uso ContainsKey per verificare se l'utente immesso un valore che è nel vostro dizionario. In tal caso, utilizzare l'indice openWith[userInput] per ottenere il valore. Se non visualizzi l'errore.

In nessun caso è necessario un corso personalizzato per implementare il proprio dizionario. Un dizionario è solo una raccolta generica di KeyValuePairs. Ha senso usare un Dictionary<string, string> qui: non è necessario renderlo più complicato.

Hai detto "Non ne ho idea", ma eri molto vicino.

Problemi correlati