web-dev-qa-db-ja.com

C#で匿名クラスに意味のある名前を指定できますか?

このような匿名クラスを作成すると、誰もが知っていることです。

var Employee = new { ID = 5, Name= "Prashant" };

...実行時には、次のタイプになります。

<>f__AnonymousType0<int,string>

そのようなクラスに意味のある名前を指定する方法はありますか?

public class Employee {}
126
Chad Grant

匿名型であり、目的に反します。これらのオブジェクトは一時的なものとして設計されています。地獄、プロパティも読み取り専用です。

申し訳ありませんが、私は賢いです。答えはノーです。匿名型に使用する名前をコンパイラーに伝える方法はありません。

実際、コンパイラーによって生成された型の名前は、その名前に不正な文字を使用しているため、アプリケーションで名前の衝突が発生することはありません。

38
Chris
public class Employee {
    public int ID { get; set; }
    public string Name { get; set; }
}

次に、次の構文を使用します

var employee = new Employee { ID = 5, Name = "Prashant" };
36
Nick Berardi

名前のある通常のクラスにしますか?

public class Employee
{
    public int ID;
    public string Name;
}


var Employee = new Employee { ID = 5, Name= "Prashant" };
24
Dead account

実際、非常にきびきびすることを恐れない場合は、TypeBuilderを使用して、匿名型に基づいて独自のランタイム型を構築できます。これにより、型の名前を指定できます。もちろん、このスレッドの他のほとんどの人が提案したようにクラスを宣言する方がはるかに簡単ですが、TypeBuilderの方法ははるかにエキサイティングです。 ;)

TypeBuilder

24
Mia Clarke

Java WorldはA - ローカルクラス (メソッドで定義))になりますが、C#にはありません。

8
Damian

はい、Anonymous Classを作成しています。クラスに名前を付けたい場合、つまりNot Anonymousを作成してから、通常のクラスまたは構造体を宣言します。

4
jcopenha

匿名なので、名前を付けることはできません。型の名前を知る必要がある場合は、実際にクラスを作成する必要があります。

4
Luis Abreu

いいえ、これらのクラスを宣言したときに意味のある型名を付ける方法はありません。匿名型は、匿名です。非常にいハックに頼らない限り、コードで明示的に型に「名前を付ける」方法はありません。

型に本当に名前を付ける必要がある場合は、必要なプロパティを持つ新しい型を明示的に宣言して使用する必要があります。

4
JaredPar

定義上、匿名型には名前を付けることはできず、コンパイラが与える名前だけにすることができると思います。匿名型に関するより意味のある設計時情報を探しているなら、コンパイラに期待しすぎています。

2
Mark Carpenter