は具体的に、私はこれを書きたい:一般的な匿名メソッドはどのように記述できますか?
public Func<IList<T>, T> SelectElement = list => list.First();
しかし、私はT
で構文エラーを取得します。一般的な匿名メソッドを使用することはできませんか?
は具体的に、私はこれを書きたい:一般的な匿名メソッドはどのように記述できますか?
public Func<IList<T>, T> SelectElement = list => list.First();
しかし、私はT
で構文エラーを取得します。一般的な匿名メソッドを使用することはできませんか?
いいえ、申し訳ありません。これには、C#がサポートする機能ではない汎用フィールドまたは汎用プロパティが必要です。あなたができる最善のは、T紹介する一般的な方法で行うことである。
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
をそして今、あなたが言うことができます。
Func<IList<int>, int> selectInts = SelectionMethod<int>();
が、T
が知られている必要があります
public Func<IList<T>, T> SelectionMethod<T>()
{
return list => list.First();
}
:あなたはジェネリック含むクラスを作成したくない場合は、汎用的なメソッドを使用することができます別の方法として
class Foo<T>
{
public Func<IList<T>, T> SelectionMethod = list => list.First();
}
しかし、まだコンパイル時に誰かがこれを知る必要がありますT
。
戻り値の型のみを汎用として宣言しました。
はこれを試してみてください:
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
それは一般的なことのためにあなたが宣言されているものの名前が型パラメータを含める必要があります。コンパイラは汎用クラスと汎用メソッドのみをサポートしています。
ので、一般的なクラスのためにあなたは
class MyGeneric<T> {
// You can use T here now
public T MyField;
}
あるいは、方法
public T MyGenericMethod<T>(/* Parameters */) { return T; }
のためにあなたはそれが最初のメソッド名で宣言された場合にのみ、リターンパラメータとしてTを使用することができますを持っている必要があります。
戻り値の型が実際のメソッドの前に宣言されているように見えますが、コンパイラはそのようには解釈しません。
public static void SomeContainerFunction()
{
const string NULL_VALUE = (string)null;
Type GetValueType<T>(T value) => value?.GetType() ?? typeof(T);
var typeOfNullValue = GetValueType(NULL_VALUE);
Debug.WriteLine($"Value: {NULL_VALUE}, Type: {typeOfNullValue}");
}
ようこそ。質問に答えるときは、コードに関連する説明を記入してください。あなたのコードを理解していない人もいるかもしれませんし、質問にどのように答えるか分からない人もいます。 [良い答えを書く方法](https://stackoverflow.com/help/how-to-answer)を参照してください。 – Nuageux
を解決します! http://stackoverflow.com/questions/4338867 – mpen