3

関数またはメソッドから返される型を探しています。最初に成功したかどうかを伝え、次にメッセージを (文字列として) 添付して、失敗した理由に関する詳細情報を渡します。アプリケーション終了コードの行にある可能性があります。ただし、特定のエラー メッセージにインデックスを付けるために終了コードのセット全体を作成することはしません。私は単一の「成功」終了コードのアイデアが好きなので、呼び出しが失敗したかどうかをすばやく確認し、それに応じて動作することができます。

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

視覚化を改善するには:

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

5 に答える 5

5

これには 2 つの明白なアプローチがあります: 独自の型を定義するか、 を使用しますTuple<T1, T2>

ほとんどの場合、独自の型を定義するだけでよいと私は主張します。費用はかかりません。早くやれよ。それがあなたの意図です。

あなたが特に怠け者だと感じているなら...

public Tuple<bool, string> MyMethod(...)
{
    ...
    return Tuple.Create(false, "Something broke");
}
于 2012-03-21T19:26:16.207 に答える
3

Instead of creating a new type you can follow the TryDoSomething pattern in the .NET framework.

For example:

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

You can create a method that returns a boolean to signal success or failure. It can also return out parameters for an error message.

于 2012-03-21T19:25:13.173 に答える
2

あなたが話していることはジェネリックと呼ばれます。これはMicrosoft intro to genericsであり、それらについてもオンラインでたくさんあります。

あなたの質問に加えて、ジェネリックをTryCan パターンと組み合わせることができます。ただし、多くの場合、例外を単にバブルしたい場合があるため、これを適切に検討してください。

于 2012-03-21T19:20:05.647 に答える
1

それは例外です。

関数は、成功に対して true/false を返すべきではありません。失敗した場合に例外をスローする void にする必要があります。

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

于 2012-03-21T19:21:31.447 に答える
0

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

私はまた、SOに関する古い質問にそのようなタイプを投稿しました:ジェネリックプロパティの欠点?

于 2012-03-21T19:23:35.880 に答える