簡體   English   中英

僅當可以正確創建對象時才返回對象

[英]Return object only if object could be properly created

我對C#編程非常陌生,並且在OOP方面有些掙扎。

我已經創建了一個類,該類具有一種分析文本文件並根據其內容創建對象的方法。 我希望此函數僅在文本文件格式正確時才返回包含文本文件中某些信息的對象。

我調用函數來分析文本文件,如下所示:

        pokerHand newHand;
        newHand = new pokerHand();

        AnalyzePokerHand.importHand("c:\\text.txt");  

        newHand = AnalyzePokerHand.getAnalyzedHand;

如果text.txt不是撲克手歷史記錄文件,或者格式不正確,等等,我不希望newHand填充有關該手的垃圾信息。

如果我只想在函數成功時才想傳遞路徑到文本文件並返回帶有有關手的信息的對象,那是正確的方法呢?

感謝您的光臨!

如果要指示沒有可用數據,則返回null是最好的方法。 這種方法的另一個優點是,如果您嘗試訪問成員變量,它將拋出空指針異常。

您有兩種選擇:
我假設您有一個pokerHand Parse(string path)方法,其中path是文本文件的位置。
您可以返回null,如下所示:

if(!filePresent || incorrectFormat)
     return null;

或者,您可以改用TryParse方法。 將該方法的簽名更改為: bool TryParse(string path, pokerHand result)
如果文件有效,則將result設置為輸出,並返回true。 如果不是,則返回false。 您這樣稱呼它:

pokerHand p;
if(!TryParse(@"C:\t.txt", p))
    //parse failed
else
    //parse was successful, p is the result


PS-在C#中,我們通常使用CamelCase作為類名-因此,按照慣例,您的類實際上應稱為PokerHand

在這種情況下,通常有兩個選項:發生故障時返回null ,或使用帶有out參數的TryParse樣式方法(例如,查看DateTime.TryParse ):

public static bool TryLoad(string filePath, out PokerHand pokerHand)
{
  pokerHand = null;
  ...
  if (fileNotLoadable) return false;
  ...
  pokerHand = loadedPokerHand;
  return true;
}

像這樣可用:

PokerHand pokerHand;
if (AnalyzePokerHand.TryLoad("c:\\text.txt", out pokerHand))
{
  // Use pokerHand here;
}

這樣的邏輯就足夠了

newHand = AnalyzePokerHand.importHand("c:\\text.txt");
if(newHand == null)
{
     // Message to your user about invalid file....
}

如果垃圾數據很可能是例外情況,則可以引發Exception來指示錯誤。 這會導致程序跳轉到您定義的某些錯誤處理代碼,因此您可以警告用戶或妥善處理錯誤。

例如:

try {
    newHand = AnalyzePokerHand.importHand("c:\\text.txt");
} catch(HandException he) {
    Console.WriteLine("Invalid hand!");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM