なぜ私はC#での暗黙的なタイプでこれを行うことはできませんか?
-
21-09-2019 - |
質問
var x = new { a = "foobar", b = 42 };
List<x.GetType()> y;
私はここで何をしたいのか行うためのさまざまな方法はありますか?
がないなら、私は本当に見ていない暗黙の種類のすべてのその多くのポイント...
解決
x.GetType()
は、実行時に評価メソッド呼び出し、です。したがって、変数の型のようなのコンパイル時の概念のために使用することはできません。私は時折、(type引数の他の場所として変数のコンパイル時の型を指定する)似たような操作を行うことができて非常に便利になることに同意しますが、現在あなたがすることはできません。私は定期的にかかわらず、それを見逃すと言うことはできません。
ただし、のの行うことができます
var x = new { a = "foobar", b = 42 };
var y = new[] { x };
var z = y.ToList();
また、一般的にリストを作成するための簡単な拡張メソッドを書くことができます:
public static List<T> InList<T>(this T item)
{
return new List<T> { item };
}
(あなたがしたい場合は、別の名前を選択してください:)
するとます:
var x = new { a = "foobar", b = 42 };
var y = x.InList();
マークが示すように、それは実際にすべての拡張メソッドである必要はありません。唯一重要なことは、あなたが匿名型に名前を付けるためにしようとする必要がないように、コンパイラはメソッドの型パラメータ外の仕事に型推論を使用することができるということです。
暗黙型付けされたローカル変数は、様々な理由のために有用であるが、彼らはあなたが明示的にまったく新しいタイプを作成せずにアドホック投影を作成することができますので、LINQで特に有用です。
他のヒント
一般的な方法でこれを行う方法があります:
public static List<T> CreateList<T>(T example) {
return new List<T>();
}
...
var list = CreateList(x);
やのとのデータリストを作成してから...
それを空にすることにより所属していません StackOverflow