6
var x = new { a = "foobar", b = 42 };
List<x.GetType()> y;

ここでやりたいことを行う別の方法はありますか?

そうでない場合、暗黙の型にはあまり意味がありません...

4

2 に答える 2

11

x.GetType()実行時に評価されるメソッド呼び出しです。したがって、変数の型のようなコンパイル時の概念には使用できません。似たようなこと (変数のコンパイル時の型を別の場所で型引数として指定すること) ができると非常に便利な場合があることに同意しますが、現在はできません。定期的に見逃すとは言えませんが。

ただし、次のことができます。

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();

Marc が示すように、実際には拡張メソッドである必要はまったくありません。唯一重要なことは、匿名型に名前を付ける必要がないように、コンパイラが型推論を使用してメソッドの型パラメーターを計算できることです。

暗黙的に型指定されたローカル変数はさまざまな理由で役立ちますが、まったく新しい型を明示的に作成しなくてもアドホックなプロジェクションを作成できるため、LINQ で特に役立ちます。

于 2009-10-15T06:15:57.670 に答える
6

ジェネリック メソッドでこれを行う方法があります。

public static List<T> CreateList<T>(T example) {
    return new List<T>();
}
...
var list = CreateList(x);

または、データを含むリスト作成してから空にする...

于 2009-10-15T06:17:11.273 に答える