1

私はC#プログラミングに非常に慣れておらず、OOPに少し苦労しています。

テキストファイルを分析し、その内容に基づいてオブジェクトを作成するメソッドを使用してクラスを作成しました。この関数は、テキストファイルが正しい形式である場合にのみ、テキストファイル内の情報の一部を含むオブジェクトを返すようにします。

次のようにテキストファイルを分析する関数を呼び出します。

        pokerHand newHand;
        newHand = new pokerHand();

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

        newHand = AnalyzePokerHand.getAnalyzedHand;

newHandtext.txtがポーカーハンド履歴ファイルではない場合、または間違った形式などである場合、ハンドに関するゴミ情報で埋められたくありません。

関数が成功したときにのみ、テキストファイルへのパスを渡して、手の情報を含むオブジェクトを返したい場合の正しいアプローチは何ですか?

ご覧いただきありがとうございます!

4

5 に答える 5

3

データが利用できないことを示したい場合は、nullを返すのが最善の方法です。このアプローチのもう1つの利点は、メンバー変数にアクセスしようとするとnullポインター例外がスローされることです。

于 2012-07-12T08:29:39.757 に答える
2

いくつかのオプションがあります。メソッド
があると仮定します。ここで、はテキストファイルの場所です。 次のように、nullを返すことができます。pokerHand Parse(string path)path

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

于 2012-07-12T08:34:38.783 に答える
1

この場合、一般的に2つのオプションがあります。null失敗した場合に返すかTryParse、outパラメーターを指定したスタイルメソッドを使用します(例として、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;
}
于 2012-07-12T08:31:51.273 に答える
0

このようなロジックで十分です

newHand = AnalyzePokerHand.importHand("c:\\text.txt");
if(newHand == null)
{
     // Message to your user about invalid file....
}
于 2012-07-12T08:31:07.883 に答える
0

ガベージデータが例外的な状況である可能性が高い場合は、例外をスローしてエラーを示すことができます。これにより、プログラムは定義したエラー処理コードにジャンプするため、ユーザーに警告したり、エラーを適切に処理したりできます。

例えば:

try {
    newHand = AnalyzePokerHand.importHand("c:\\text.txt");
} catch(HandException he) {
    Console.WriteLine("Invalid hand!");
}
于 2012-07-12T08:31:24.993 に答える