私は、メソッドのオーバーロードに対して戻り値の型を異なるものにしたいという状況がありますが、C#ではこれを行うことはできません。C#オーバーロードの戻り値の型 - 推奨される方法
これを処理する最善の方法は何ですか?私のプログラム構造に欠陥があるということが必要だという事実はありますか?
C#でこれが不可能であるという事実を考えれば、推奨されるアプローチは何ですか?
私は、メソッドのオーバーロードに対して戻り値の型を異なるものにしたいという状況がありますが、C#ではこれを行うことはできません。C#オーバーロードの戻り値の型 - 推奨される方法
これを処理する最善の方法は何ですか?私のプログラム構造に欠陥があるということが必要だという事実はありますか?
C#でこれが不可能であるという事実を考えれば、推奨されるアプローチは何ですか?
通常、メソッドに異なる名前を付けるだけです。
この例はGetInt32
とIDataReader
で、GetInt64
など
正直に言うと、私は、これは通常、とにかく何をしようとして、それが明確になると考えている - あなたがして ANを呼び出すしている場合は特にオーバーロードされたメソッドの結果は
Console.WriteLine(reader.GetInt32()); // This is clear
Console.WriteLine(foo.OverloadedGet()); // Which overload of OverloadedGet?
名前を変更するとそのことが明らかになるため、答えとして受け入れられます私は探していた。 – richard
C#でこれが不可能であるという事実を考えると、推奨されるアプローチは何ですか?
これはなぜ必要なのかによって異なります。
最も一般的なアプローチは、別の名前を使用することです。フレームワークは多くの場合、Convert classのようにこれを行います。
あなたは複数のタイプをサポートしたい場合は、あなたが一般的な方法を介してこれを行うことができます:それは、基本クラスの「エンティティ」タイプがあることが一般的ですよう
T SomeMethod<T>()
// Optionally add constraints:"
where T : IFoo
{
ジェネリックメソッドのアプローチは、repostoriesのための共通です。
戻り値の型を指定することができます。
public static T[] Method1<T>(int i, T type)
{
return new T[i];
}
私は既に回答を掲載していますが、別の方法があります:object
を使用してください。
object TheMethod(MyEnum type)
{
if (type == MyEnum.A) return (object)SubMethod1();
else if (type == MyEnum.B) return (object)SubMethod2();
//...
}
int SubMethod1() { return 1; }
string SubMethod2() { return "a"; }
結果を適切な型にキャストします。
このメソッドは何をしますか? –
データのリストをLinkedListまたはDictionaryとして取得します。 – richard
'var'キーワードの出現により、これは曖昧さなしに実装することは不可能です。 [function-overloading-by-return-type]を参照してください(http://stackoverflow.com/questions/442026/function-overloading-by-return-type) – nawfal