2015-06-22 6 views
7

मैं कच्चा टाइपिंग/प्रोग्रामिंग के ~ 24 वास्तविक घंटे से कम, एक बहुत नया सी # प्रोग्रामर हूं। मैं पढ़ने, देखने और चीजों को समझने की कोशिश करने के एक सप्ताह के बारे में कहूंगा।भविष्य में समस्याग्रस्त कोड को ठीक करना?

यहाँ मेरा पहला कार्यक्रम के लिए स्रोत कोड है:

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

कार्यक्रम वास्तव में क्या करता है मैं इसे करना चाहते हैं। उपयोगकर्ता उन्हें प्राप्त होने वाले बग चेक कोड का प्रकार देता है, यह बहुत ही बुनियादी एमएसडीएन-एमएसएफटी परिभाषा को वापस चलाता है, और आपको या तो एक और बग चेक कोड टाइप करने या प्रोग्राम छोड़ने के लिए बाहर निकलने के लिए कहता है।

हालांकि, वीडियो/रीडिंग सामग्री के अनुसार, सीखने की एक महत्वपूर्ण बात यह है कि कोड को कैसे स्पॉट करना है जो भविष्य में एक समस्या होगी। खैर, कम से कम मेरे परिप्रेक्ष्य से, जिस विधि में मैं बग चेक के संबंध में उपयोगकर्ता के इनपुट के मूल्य की जांच करने के लिए उपयोग कर रहा हूं वह संभवतः अच्छा नहीं है, क्योंकि यह अंततः रास्ता बहुत बड़ा और गन्दा दिया गया है बग जांच वहाँ हैं।

तो मैंने कुछ शोध किया और शब्दकोशों के बारे में पता चला, साफ। मैं इस के साथ आया था:

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

अब पूरे समय किया गया है "बिल्ली मैं अपने वर्तमान कोड में यह लागू कैसे हो?", और मैं अभी भी वास्तव में नहीं जानता कि जो मेरे लिए shames अपने आप से सवाल का कहना है। मैंने नई कक्षाओं को बनाने/प्रबंधित करने की कोशिश की और शोध करने की कोशिश की है, और हालांकि यह थोड़ा उलझन में था, मुझे इसका मूल विचार मिला और एक त्वरित कार्यक्रम लिखा जो उपयोगकर्ता इनपुट के लिए नहीं पूछता है, बल्कि इसके बजाय बस कंसोल पर प्रिंट करता है :

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

} 

तो मैं इन सबसे छुटकारा शब्दकोशों और वर्गों के मूल बातें समझ है, लेकिन मैं अभी भी पता नहीं कैसे मेरे वर्तमान "बग की जांच" कार्यक्रम में/एक बेहतर तरीका लागू करने के लिए की है।

कोई सलाह, टिप्स? मैंने अपनी पोस्ट को यह दिखाने के लिए प्रयास करने की कोशिश की कि मैं इसे अपने आप समझने के लिए जितना संभव हो सके कोशिश कर रहा हूं क्योंकि मुझे पता है कि लोग दूसरों के लिए कोड प्राप्त करने की कोशिश कर रहे लोगों पर स्टैक ओवरफ्लो फहराते हैं, मुझे यकीन नहीं है कि और कहां देखना है/इसे समझने के लिए पढ़ें, या कम से कम सही दिशा में इसे कैसे कदम दें। उपयोगकर्ता अपने शब्दकोश में है कि एक मूल्य inputted अगर जाँच करने के लिए

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

उपयोग ContainsKey:

+0

यह सब जगह पर है। सुनिश्चित नहीं है कि अंतिम कक्षाएं कस्टम कक्षाओं के बारे में क्या हैं। क्या आप अपने शब्दकोश को अपने पहले से ही काम करने वाले कोड में कार्यान्वित करना चाहते हैं? आपको क्या समस्याएं थीं? – Jonesopolis

+1

जबकि मैं (और शायद हममें से बाकी भी) वास्तव में सराहना करते हैं कि इसमें कितना प्रयास किया गया था, हमें एक विशिष्ट प्रश्न की आवश्यकता है। क्या यह शब्दकोश का उपयोग कैसे करें? शब्दकोशों का उपयोग करने के लिए मौजूदा कोड को दोबारा कैसे करें? भगवान forbid, एक ट्यूटोरियल कहाँ खोजें? –

+0

क्षमा करें दोस्त, तीसरा (कस्टम वर्ग) वहां है क्योंकि मैंने सोचा था कि मुझे अपने पहले से ही काम करने वाले कोड में शब्दकोशों को लागू करने के लिए कक्षाओं को समझने की आवश्यकता है।मेरी मुख्य समस्या यह है कि (यहां खुद को दोहराना) मुझे अंततः यह नहीं पता कि मेरे पहले से ही काम करने वाले कोड में लागू शब्दकोशों को कैसे कार्यान्वित किया जाए। – ajdbnabad13

उत्तर

3

यहाँ अपने शब्दकोश की एक बहुत ही सरल कार्यान्वयन है। यदि ऐसा है, तो मूल्य प्राप्त करने के लिए अनुक्रमणिका openWith[userInput] का उपयोग करें। अगर त्रुटि प्रदर्शित नहीं होती है।

किसी भी तरह से आपको अपनी खुद की शब्दकोश को लागू करने के लिए कस्टम क्लास की आवश्यकता नहीं है। ए डिक्शनरी केवल KeyValuePairs का एक सामान्य संग्रह है। यह आपके लिए Dictionary<string, string> का उपयोग करने के लिए समझ में आता है - इसे और अधिक जटिल बनाने की आवश्यकता नहीं है।

आपने कहा "मुझे कोई जानकारी नहीं है", लेकिन आप वास्तव में काफी करीब थे।

संबंधित मुद्दे