Какова цель анонимных типов?

Это то, что контролируется вашим терминалом, а не printf.

printf просто отправляет \t в выходной поток (который может быть tty, файл и т. Д.), Он не отправляет несколько пробелов.

7
задан Josh G 22 June 2009 в 16:21
поделиться

6 ответов

Анонимные типы предназначены для использования только в очень узких областях. Большинство вариантов использования, которые у меня были, связаны с Linq.

var result = from x in MyCollection
             select new 
             {
                 x.Prop1, 
                 x.Prop2
             };

Кроме того, в случае Linq to SQL - использование анонимных типов будет генерировать другой SQL, выбирая только столбцы, которые используются в анонимном типе. В приведенном выше случае (если бы это был запрос Linq to SQL) он генерировал бы что-то вроде «select prop1, prop2 from mytable» вместо выбора всех полей.

Я никогда (пока) не сталкивался с такой ситуацией. где я хотел просто объявить новый анонимный тип в своем коде. Я полагаю, что если что-то еще, может быть, это было бы хорошим использованием для локальных констант?

var x = new
        {
            FirstName = "Scott",
            LastName = "Ivey"
        };
4
ответ дан 7 December 2019 в 01:25
поделиться

Однако это не останавливает, например, команду ASP.NET MVC, которую вы используете как объект параметра в стиле Hashtable ...

Url.Action(new{controller="Home", action="Index"})

Что я бы не стал поощрять, потому что интенсивного использования магических строк.

Я почти исключительно использую анонимные типы в LINQ-операторах, где в том же методе вы перебираете набор результатов. В значительной степени именно поэтому они были представлены

2
ответ дан 7 December 2019 в 01:25
поделиться

Один случай, который я обнаружил анонимным Полезный тип - это сериализация объектов в JSon и их возврат в действиях ASP.NET MVC. Вам не обязательно возвращать все свойства объекта, и анонимный тип может вам в этом помочь ..

[AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Person(int id)
    {
        Person person = manager.GetPersonById(id);
        if(Request.IsAjaxRequest())
            return Json(new {Name=person.Name, Age=person.Age,...});
        else
            ...
    }
2
ответ дан 7 December 2019 в 01:25
поделиться

Они полезны в любое время, когда вы хотите выполнить запрос над некоторыми объектами, а затем выполнить над ними другие операции (например, итерацию).

Например:

var procs = System.Diagnostics.Process.GetProcesses().Select(p => new { p.Id, p.ProcessName});
foreach(var p in procs)
{
    Console.WriteLine("{0}: {1}", p.Id, p.ProcessName);
}
1
ответ дан 7 December 2019 в 01:25
поделиться

В последнее время мне очень повезло с ними в удовлетворении полей в DataGrids или DataViews, которые зависят от столбцов из запросов, которые больше не возвращают те же данные. Например, иногда источники данных нормализовались или поля переименовывались по разным причинам. Используя запрос LINQ, возвращающий анонимные типы в качестве «интерфейса», мы можем сохранить существующие сетки в рабочем состоянии.

1
ответ дан 7 December 2019 в 01:25
поделиться

Правильно; они применимы только в крайне ограниченном объеме.

0
ответ дан 7 December 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: