9

ASP.NET MVCドキュメントを調べていると、このイディオムが頻繁に使用されていることがわかります。

new { foo = "bar", baz = "foo" }

これは辞書リテラル構文ですか?呼び出された関数定義によって推測された型の新しいクラス/構造体ですか?どうして変数は型定義を必要としないのvarでしょうか?

4

3 に答える 3

14

これは匿名タイプです。

匿名型は、最初に型を明示的に定義することなく、読み取り専用プロパティのセットを単一のオブジェクトにカプセル化する便利な方法を提供します。タイプ名はコンパイラによって生成され、ソースコードレベルでは使用できません。各プロパティのタイプは、コンパイラによって推測されます。

http://msdn.microsoft.com/en-us/library/bb397696.aspx

LINQの例

var result = myEnumerable.Select( o => new { foo = o.Foo, bar = o.Bar } );
// "result" is an enumerable of a new anonymous type containing two properties

その他の質問

これは辞書リテラル構文ですか?

いいえ、多くの類似点がありますが。ASP .Net MVCはRouteValueDictionary、匿名型を使用して、多くのメソッドのオーバーロードで同じ情報を表します。

どうしてvarsは型定義を必要とせず、varさえも必要としないのですか?

値の型は推測されますが、推測が常に可能であるとは限りません。http: //msdn.microsoft.com/en-us/library/bb531357.aspx (VBバージョン、c#に相当するURLを知っている場合は更新してください)

于 2012-10-05T03:28:21.950 に答える
4

これは匿名型の構文です。タイプ名はコンパイラによって生成され、ソースコードレベルでは使用できません。各プロパティのタイプは、コンパイラによって推測されます。

于 2012-10-05T03:28:07.820 に答える
2

これは匿名タイプです。つまり、文字列型の両方のプロパティを持つfooプロパティを返すものを返しているということです。baz

于 2012-10-05T03:28:56.120 に答える