Могу ли я указать значимое имя для анонимного класса в C #? - PullRequest
43 голосов
/ 27 апреля 2009

Мы все знаем, что когда мы создаем анонимный класс, подобный этому:

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

... во время выполнения будет иметь тип:

<>f__AnonymousType0<int,string>

Есть ли способ указать значимое имя для таких классов?

Ответы [ 10 ]

125 голосов
/ 27 апреля 2009
public class Employee {}

38 голосов
/ 27 апреля 2009

Это анонимный тип, который побеждает цель. Эти объекты предназначены для временного использования. Черт, свойства даже доступны только для чтения.

Извините, я умница. Ответ - нет, нет способа сообщить компилятору, какое имя использовать для анонимного типа.

На самом деле, имена типов, сгенерированных компилятором, используют в именах недопустимые символы, поэтому вы не можете столкнуться с именами в своем приложении.

36 голосов
/ 27 апреля 2009
public class Employee {
    public int ID { get; set; }
    public string Name { get; set; }
}

Затем используйте следующий синтаксис

var employee = new Employee { ID = 5, Name = "Prashant" };
24 голосов
/ 27 апреля 2009

На самом деле, если вы не боитесь получить крайне мелкие детали, вы можете использовать TypeBuilder для создания собственного типа среды выполнения на основе вашего анонимного типа, который позволит вам указать имя для типа. Конечно, намного проще просто объявить класс, как предложили почти все остальные в этом потоке, но способ TypeBuilder гораздо более захватывающий. ;)

TypeBuilder

24 голосов
/ 27 апреля 2009

Сделать это обычным классом с именем?

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


var Employee = new Employee { ID = 5, Name= "Prashant" };
8 голосов
/ 29 июня 2011

Ответ в Java World будет локальный класс (определенный в методе), который отсутствует в C #.

4 голосов
/ 27 апреля 2009

Нет, невозможно дать осмысленное имя типа этим классам, как вы их объявили. Анонимные типы - это просто аноним. Невозможно явно «назвать» тип в коде, не прибегая к очень отвратительным способам взлома.

Если вам действительно нужно дать типу имя, вам нужно явно объявить и использовать новый тип с нужными вам свойствами.

4 голосов
/ 27 апреля 2009

Поскольку это аноним, вы не можете назвать его. Если вам нужно знать имя типа, тогда вы действительно должны создать класс.

4 голосов
/ 27 апреля 2009

Да, вы создаете Анонимный класс , если вы хотите, чтобы у вашего класса было имя, т.е. Не анонимный , затем объявляйте обычный класс или структуру.

2 голосов
/ 27 апреля 2009

Я думаю, что по определению у анонимных типов не может быть имени, только то, что дает его компилятор. Если вам нужна более значимая информация времени разработки для анонимных типов, то вы ожидаете слишком многого от компилятора.

...