1

私はC#が初めてです。このようなステートメントを宣言すると

var list = new { FirstName = "Jon", LastName ="Doz" }; .

宣言で型を指定していません。コンパイラはエラーをスローせずにそれをどのように受け入れますか。

つまりnew <without type>

4

5 に答える 5

4

無名型といいます

C# コンパイラは、バックグラウンドでこれを次のようなより冗長な宣言に変換します。

class __Anonymous1
{
   private string firstName ;
   private string lastName;
   public string FirstName{get { return firstName; } set { firstName = value ;} }
   public string LastName{ get { return lastName; } set { lastName= value ; } }
}
__Anonymous1 list = new __Anonymous1();
list.FirstName = "Jon";
list.LastName ="Doz";
于 2013-06-29T05:02:29.273 に答える
2

実際には、宣言したフィールドのみを持つ一種の一時クラスである匿名型を作成しています。

これを行っていないことに注意してくださいvarvar型推論を行うだけなのでvar list = new List<int>();、匿名型は作成されません。new {...}一時的なクラスの作成を担当するのは です。ただし、var匿名型には名前がないため、使用することが変数に格納する唯一の方法です。

于 2013-06-29T05:01:27.787 に答える
0

これを匿名型と呼びます。名前のない型に属し、指定した 2 つのプロパティを持つ単純なオブジェクトです。

匿名型の詳細については、次を参照してください。

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

于 2013-06-29T05:01:57.983 に答える
0

As @IanHenry stated, you are creating an Anonymous Type. They were created to support LINQ and are readonly. This means if you create an anonymous type like the one in your question, you cannot update any of the values.

于 2013-06-29T05:03:15.257 に答える
0

This concept is knows as Anonymous Types. From MSDN:

Anonymous types provide a convenient way to encapsulate a set of read-only properties into a single object without having to explicitly define a type first. The type name is generated by the compiler and is not available at the source code level. The type of each property is inferred by the compiler.

于 2013-06-29T05:04:23.250 に答える