2012-03-21 3 views
3

私は、関数またはメソッドから返される型を探しています。成功したかどうかを最初に伝え、メッセージに(文字列として)アタッチして、失敗した理由に関する詳細情報を渡します。アプリケーション終了コードの行に何かがある可能性があります。ただし、特定のエラーメッセージのインデックスを作成するための一連の終了コードは作成しないでください。私は単一の「成功」出口コードの考え方が好きなので、呼び出しが失敗したかどうかを素早くチェックしてそれに応じて作業することができます。Boolと静的メソッドの返り値の文字列を含むC#の組み込み型はありますか?

私はこれをサービス呼び出しのような一連の静的メソッドの戻り値型にしたいと思っていましたが、その2つのフィールド(boolとstring)を持つクラスを作成するだけでした。しかし、私はそれを見つけることができませんでしたが、これらのようなものがすでに存在するかもしれないと感じます。また、この種の情報を取得するためのメソッドからの戻り値や、これらの静的クラスに対する一般的なルールをすべて処理する方が良い場合は、あなたのコメントを歓迎します。より見やすくするために

public static <type> CreateSomething(string somethingName) 
    { 
     ... 
     return new <type>("Fail!", "Because..."); 
    } 
+0

関連質問(おそらくない正確な複製):http://stackoverflow.com/questions/5919700/generic-property-disadvantages – CodesInChaos

+0

しかし、一般的なタイプを探しているわけではありません。 – rae1

答えて

5

独自のタイプを定義するか、Tuple<T1, T2>を使用する2つの明らかなアプローチがあります。

私はあなたがほとんど常に自分のタイプを定義する必要があると主張します。それは何も費やさない。早くやれよ。それがあなたがそれをする方法です。

あなたがが特に怠惰な感じている場合は...

public Tuple<bool, string> MyMethod(...) 
{ 
    ... 
    return Tuple.Create(false, "Something broke"); 
} 
+0

タプルはこれを解決しません。むしろ差別化された組合が必要です。エラーまたは値があります。 – CodesInChaos

+4

@ CodeInChaos私は、タプルがこの情報を表現するためのアプローチであるという感想に同意するでしょう。しかし、OPはboolと文字列を持つ型を要求するので、OPはboolと文字列を持つ型を取得します。 –

+0

さらに、答えがない代替案を提案する十分な答えがすでに存在し、正確なことを行う方法を示唆しています。 –

2

何がgenericsと呼ばれ話しています。ここにはMicrosoft intro to genericsがあります。また、それらについても多くのオンライン情報があります。

さらに、TryCan patternとジェネリックスを組み合わせることもできます。しかし、しばしば例外をバブリングする必要があるので、適切にこれを考えてください。

+0

私はジェネリック型を探しているわけではありません。すべてのケースで両方の型を返したいと思います。しかし、私はTryCanパターンを詳しく見ていきます。 – rae1

1

例外です。

あなたの関数は、成功のためにtrue/falseを返すべきではありません。失敗した場合は例外をスローするvoidでなければなりません。

...そして、メソッドのXMLコメントに例外を入れることを忘れないでください。

+2

それはあまりにも一般的な声明です。 'MayBe'パターンはしばしばその例外をより良くします。 – CodesInChaos

+0

はい、ときどき例外が本当に深刻なものであること、およびあなたが気にかけたり無視して例外にならないようにしたり、少なくともそれらがある程度下のレベルで世話をしてもらいたいということだけを望むことがあります。無視できるエラーを処理するために、どこにでもTry/Catchステートメントを置くのが好きではありません。 – JayC

+0

そして、何?この考えは、例外を処理して、そのプログラムを失敗させるだけではなく、回避することです。それはちょうど悪い習慣です。 – rae1

0

.netのコアアセンブリには、このようなタイプは含まれていません。 F#ランタイムでOption<T>が見つかります。

は、私はまた、SOに古い問題のようなタイプを投稿:Generic property disadvantages?

+0

私はジェネリック型を探しているわけではありません:私はどちらの場合でも両方の型を返す必要があります。 – rae1

3

を代わりに使用すると、.NET FrameworkでTryDoSomethingパターンをたどることができる新しいタイプを作成します。例えば

:あなたが成功または失敗を通知するブール値を返すメソッドを作成することができ

int number; 
if(Int32.TryParse(value, out number)) 
{ 
    Console.WriteLine(number); 
} 

。また、エラーメッセージのパラメータを返すこともできます。

関連する問題