2015-06-22 18 views
7

Jestem bardzo nowym programistą C#, mniej niż ~ 24 godziny rzeczywistego wpisywania/programowania. Powiedziałbym jednak, że przez tydzień będę czytał, oglądał i próbował zrozumieć.Naprawianie przyszłego problematycznego kodu?

Oto kod źródłowy do mojego pierwszego programu:

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

Program robi dokładnie to, co chcemy. Użytkownik wpisze kod sprawdzania błędów, który otrzymywał, usuwa bardzo podstawową definicję MSDN-MSFT i prosi o wpisanie innego kodu sprawdzającego błąd lub wyjście z programu.

Jednak według filmów/materiałów do czytania ważną rzeczą do nauczenia się jest to, jak rozpoznać kod, który będzie problemem w przyszłości. Cóż, przynajmniej z mojej perspektywy metoda, w której używam do sprawdzenia wartości danych wejściowych użytkownika dotyczących sprawdzania błędów, jest potencjalnie niedobra, ponieważ ostatecznie będzie zbyt duża i niechlujna pod względem liczby sprawdzenia błędów są.

Więc zrobiłem trochę badań i dowiedziałem się o słownikach, schludny. Wpadłem na to:

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

Teraz pytanie do siebie przez cały czas była „Jak do cholery mogę wdrożyć to do mojego aktualnego kodu?”, A ja nadal nie wiem, który zawstydza mnie mówić. Próbowałem wyszukiwać i badać tworzenie/zarządzanie nowymi klasami i chociaż było to nieco mylące, otrzymałem podstawowy pomysł i napisałem szybki program, który nie wymaga wprowadzania danych przez użytkownika, ale zamiast tego po prostu drukuje do konsoli :

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

} 

Więc jakby zrozumieć podstawy słowników i klas, ale wciąż nie mam pojęcia jak do wdrożenia/lepszą metodę do mojego obecnego programu „Sprawdź bug”.

Wszelkie porady, porady? Próbowałem zrobić mój post, aby pokazać, że starałem się jak najwięcej, aby sam to rozgryźć, ponieważ wiem, że StackOverflow marszczy brwi na ludzi, którzy próbują nakłonić innych do kodowania ich, po prostu nie jestem pewien, gdzie jeszcze szukać/przeczytaj, aby dowiedzieć się, lub jak przynajmniej krok we właściwym kierunku.

+0

to wszystko w każdym miejscu. Nie wiem, jaka jest ostatnia trzecia klasa niestandardowa. Czy chcesz zaimplementować swój słownik do już działającego kodu? Jakie miałeś problemy? – Jonesopolis

+1

Podczas gdy ja (i prawdopodobnie także reszta z nas) naprawdę doceniamy, ile wysiłku włożono w to, potrzebujemy konkretnego pytania. Czy używać słowników? Jak zawęzić istniejący kod do korzystania ze słowników? Nie daj Boże, gdzie znaleźć poradnik? –

+0

Przykro mi, kolego, trzecia (niestandardowe klasy) jest tam, ponieważ myślałem, że potrzebuję zrozumieć klasy, aby wprowadzić słowniki do mojego już działającego kodu.Głównym problemem, jaki mam (powtarzam tutaj), ostatecznie nie mam pojęcia, w jaki sposób wprowadzić słowniki implementacyjne do mojego już działającego kodu. – ajdbnabad13

Odpowiedz

3

Oto bardzo prosta implementacja słownika:

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

użycie ContainsKey aby sprawdzić, czy użytkownik wpisał wartość, która jest w słowniku. Jeśli tak, użyj indeksu openWith[userInput], aby uzyskać wartość. Jeśli nie wyświetla błędu.

W żaden sposób nie potrzebujesz niestandardowej klasy do implementacji własnego słownika. Słownik to tylko ogólny zbiór KeyValuePairs. To ma sens, abyś użył tutaj Dictionary<string, string> - nie ma potrzeby, aby było to bardziej skomplikowane.

Powiedziałeś "Nie mam pojęcia", ale byłeś naprawdę blisko.

Powiązane problemy