2009-04-27 14 views
42

我々はすべて私たちは、このように匿名クラスを作成するときにことを知っている:実行時に、それは型になります...C#で匿名クラスに意味のある名前を指定できますか?

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

<>f__AnonymousType0<int,string> 

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

+17

http://dictionary.reference.com/browse/anonymous – Cerebrus

+5

これは本当に愚かな質問ではありません。私はこの1つについてJonのスケルトンを使っています。匿名の名前が必要です。http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type – Maslow

+1

私にはわかりませんが、C#には匿名のクラスはありません。匿名のタイプがあり、これは非常に大きな違いになります。 – Damian

答えて

24

名前を持つ通常のクラスにしますか?

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


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

38

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

申し訳ありませんが、私はスマートなお尻です。答えはいいえ、匿名型にどのような名前を使用するかをコンパイラに指示する方法はありません。

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

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

それから私は、定義により、匿名型だけでは、コンパイラはそれを与える、名前を持つことができない、と考えて、次の構文

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

を使用しています。匿名型のより意味のある設計時の情報を探しているなら、コンパイラがあまりにも多くを期待しています。あなたのクラスが名前を持たせたい場合は、匿名、すなわち匿名クラスを未作成している

4

はい、その後、通常のクラスまたは構造体を宣言します。

4

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

4

いいえ、宣言したとおり、これらのクラスに意味のある型名を付けることはできません。匿名のタイプはちょうどその、匿名です。非常に醜いハックに頼らずに、コードの型を明示的に「名前付け」する方法はありません。

実際にタイプに名前を付ける必要がある場合は、明示的に宣言し、必要なプロパティで新しいタイプを使用する必要があります。

23

実際に、あなたはきわめてぎこちないことを恐れていない場合は、TypeBuilderを使用して、匿名タイプに基づいて独自のランタイムタイプを構築できます。これにより、タイプの名前を指定できます。もちろん、クラスの宣言だけでは、このスレッドの中の他のほとんどの人が示唆するように簡単にできますが、TypeBuilderの方がはるかにエキサイティングです。 ;)は、Javaの世界で

TypeBuilder

8

答えはC#で存在しない方法で定義されたlocal class()であろう。

+1

このスレッドを見つけたとき、私は実際にこの正確な機能を探していました。 .NETで〜10年ではなく、Javaで数年しか働いていません。ローカルクラス(インタフェースまたは基本クラスから)を作成できることは、Javaでは.NETには欠かせない非常に便利な機能です。 – MikeJansen

関連する問題