2009-04-27 3 views
42

Wir alle wissen, dass, wenn wir eine anonyme Klasse wie folgt zu erstellen:Kann ich einen aussagekräftigen Namen für eine anonyme Klasse in C# angeben?

<>f__AnonymousType0<int,string> 

Gibt es eine Möglichkeit, einen aussagekräftigen Namen zu geben:

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

... zur Laufzeit es vom Typ sein zu solchen Klassen?

+17

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

+5

es ist wirklich keine dumme Frage, ich bin mit Jon Skeet zu diesem Thema, wir brauchen Namen anonyme Typen.genommen von http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type – Maslow

+1

Ich bin nicht sicher, aber es gibt keine anonymen Klassen in C#. Es gibt anonyme Typen, und das macht einen großen Unterschied. – Damian

Antwort

24

Machen Sie es zu einer regulären Klasse mit einem Namen?

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


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

38

Es ist ein anonymer Typ, der den Zweck besiegt. Diese Objekte sind als temporäre Objekte gedacht. Zur Hölle, die Eigenschaften sind sogar schreibgeschützt.

Sorry, ich bin ein kluger Esel. Die Antwort ist nein, es gibt keine Möglichkeit, dem Compiler mitzuteilen, welcher Name für einen anonymen Typ verwendet werden soll.

Tatsächlich verwenden die Namen der vom Compiler generierten Typen ungültige Zeichen in ihrer Benennung, so dass Sie in Ihrer Anwendung keine Namenskollision haben können.

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

Dann die folgende Syntax

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

Ich denke verwenden, die per definitionem kann Anonyme Typ einen Namen nicht hat, nur das, was der Compiler es gibt. Wenn Sie nach aussagekräftigeren Entwurfszeitinformationen zu anonymen Typen suchen, erwarten Sie zu viel vom Compiler. einen Namen haben, das heißt nicht anonym, dann deklarieren Sie eine reguläre Klasse oder Struktur

4

Ja, Sie schaffen eine Anonym Klasse, wenn Sie Ihre Klasse wollen.

4

Da es anonym ist, können Sie es nicht nennen. Wenn Sie den Namen eines Typs kennen müssen, müssen Sie wirklich eine Klasse erstellen.

4

Nein, es gibt keine Möglichkeit, diesen Klassen einen aussagekräftigen Typnamen zu geben, wie Sie ihn deklariert haben. Anonyme Typen sind nur das, anonym. Es gibt keine Möglichkeit, den Typ im Code explizit zu benennen, ohne auf sehr hässliche Hacks zurückzugreifen.

Wenn Sie dem Typ wirklich einen Namen geben müssen, müssen Sie explizit einen neuen Typ mit den von Ihnen benötigten Eigenschaften deklarieren und verwenden.

23

Wenn Sie keine Angst davor haben, extrem nittig zu werden, können Sie mit TypeBuilder Ihren eigenen Runtime-Typ basierend auf Ihrem anonymen Typ erstellen, mit dem Sie einen Namen für den Typ angeben können. Natürlich ist es viel einfacher, eine Klasse als fast alle anderen in diesem Thread zu deklarieren, aber der TypBuilder Weg ist viel aufregender. ;)

TypeBuilder

8

Die Antwort in Java Welt wäre ein local class (definiert in einem Verfahren) sein, die in C# nicht vorhanden sind.

+1

Ich war tatsächlich auf der Suche nach genau dieser Funktionalität, als ich diesen Thread gefunden. Ich habe nur ein paar Jahre in Java gearbeitet, im Gegensatz zu ~ 10 Jahren in .NET. In der Lage zu sein, eine lokale Klasse (von einer Schnittstelle oder einer Basisklasse) zu erstellen, ist definitiv eine sehr nützliche Funktion in Java, die in .NET fehlt. – MikeJansen

Verwandte Themen