2015-06-22 11 views
7

Ich bin ein sehr neuer C# -Programmierer, weniger als ~ 24 tatsächliche Stunden des rohen Schreibens/Programmierens. Ich würde sagen, ungefähr eine Woche lang, zu lesen, zu beobachten und zu versuchen, die Dinge zu verstehen.Behebung zukünftiger problematischer Code?

Hier ist der Quellcode zu meinem ersten Programm:

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); 
     } 
    } 
} 
} 

Das Programm macht genau das, was ich will es. Der Benutzer gibt den Fehlerprüfcode ein, den er erhält, er schießt die sehr grundlegende MSDN-MSFT-Definition zurück und fordert Sie auf, entweder einen anderen Fehlerprüfcode einzugeben oder den Befehl zum Beenden des Programms zu beenden.

Jedoch laut Videos/Lesematerialien, eine wichtige Sache zu lernen ist, wie Code zu erkennen, der ein Problem in der Zukunft sein wird. Nun, zumindest aus meiner Sicht ist die Methode, mit der ich den Wert der Benutzereingaben in Bezug auf die Fehlerprüfung überprüfe, möglicherweise nicht gut, weil es schließlich Weg zu groß und chaotisch angesichts der Anzahl sein wird Bug Checks gibt es.

Also habe ich etwas recherchiert und herausgefunden, Wörterbücher, ordentlich. Ich kam mit dieser:

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(); 
    } 
} 
} 

Nun ist die Frage für mich die ganze Zeit gewesen „Wie zum Teufel mache ich das in meinem aktuellen Code implementieren?“, Und ich weiß noch nicht wirklich, was eine Schande für mich sagen. Ich habe versucht, nachzuschlagen und nach neuen Klassen zu suchen/zu managen, und obwohl es etwas verwirrend war, habe ich die Grundidee davon und habe ein schnelles Programm geschrieben, das nicht nach Benutzereingaben fragt, sondern einfach nur auf die Konsole druckt ich verstehe irgendwie die Grundlagen der Wörterbücher und Klassen

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; 
    } 
} 

} 

Also, aber ich habe noch keine Ahnung, wie die/eine bessere Methode in meiner aktuellen „Fehlerprüfung“ Programm zu implementieren.

Irgendwelche Ratschläge, Tipps? Ich versuchte, meinen Beitrag zu zeigen, dass ich so viel wie möglich versuchte, es selbst herauszufinden, weil ich weiß, dass StackOverflow die Leute missbilligt, nur um andere dazu zu bringen, für sie zu kodieren. Ich bin mir nicht sicher, wo ich sonst hinsehen sollte/lesen, um es herauszufinden, oder wie man es wenigstens in die richtige Richtung bringt.

+0

das ist irgendwie überall. Nicht sicher, was das letzte Drittel über benutzerdefinierte Klassen ist. Möchten Sie Ihr Wörterbuch in Ihren bereits funktionierenden Code implementieren? Welche Probleme hatten Sie? – Jonesopolis

+1

Während ich (und wahrscheinlich auch der Rest von uns) wirklich zu schätzen weiß, wie viel Aufwand in diese Sache gesteckt wurde, brauchen wir eine spezifische Frage. Wie benutzt man Wörterbücher? Wie man vorhandenen Code umwandelt, um Wörterbücher zu verwenden? Gott bewahre, wo finde ich ein Tutorial? –

+0

Tut mir leid, Kumpel, die dritte (benutzerdefinierte Klassen) ist da, weil ich dachte, ich musste Klassen verstehen, um Wörterbücher in meinen bereits funktionierenden Code zu implementieren.Das Hauptproblem, das ich habe (ich wiederhole mich hier), habe ich letztlich keine Ahnung, wie man Wörterbücher in meinen bereits funktionierenden Code implementiert. – ajdbnabad13

Antwort

3

Hier ist eine sehr einfache Umsetzung Ihrer Wörterbuch:

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"); 
     } 
    } 

Verwendung ContainsKey zu überprüfen, ob der Benutzer einen Wert, der in Ihrem Wörterbuch ist eingegeben. Wenn dies der Fall ist, verwenden Sie den Index openWith[userInput], um den Wert zu erhalten. Wenn nicht, zeige den Fehler an.

Auf keinen Fall benötigen Sie eine benutzerdefinierte Klasse, um Ihr eigenes Wörterbuch zu implementieren. Ein Dictionary ist nur eine generische Sammlung von KeyValuePairs. Es ist sinnvoll, hier eine Dictionary<string, string> zu verwenden - es muss nicht komplizierter gemacht werden.

Sie sagten "Ich habe keine Ahnung", aber Sie waren wirklich ganz in der Nähe.

Verwandte Themen