Пример реального мира для анонимных типов С#.NET
Я изучаю Анонимный тип в С#, я понял, как они определены и используются. Ниже приведен пример кода, который я пробовал для анонимного типа.
var myType = new {
Name = "Yasser",
City = "Mumbai"
};
Console.WriteLine("Name: {0}, Type: {1}", myType.Name, myType.City);
Мой вопрос
Где в реальном мире сценарий будет использоваться? Может ли кто-нибудь дать мне пример или сценарий, в котором можно использовать этот анонимный тип.
Ответы
Ответ 1
Запросы LINQ используют их много:
var productQuery =
from prod in products
select new { prod.Color, prod.Price };
{ prod.Color, prod.Price }
- анонимный тип, который имеет свойство Color
и Price
только для чтения. Если вы будете перебирать результаты этого запроса, вы можете использовать этот тип как любой другой класс:
foreach (var v in productQuery)
{
Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}
Другими словами, вам не нужно было определять новый класс, который выглядел бы примерно так:
public class ColoredPricedItem
{
public Color {get;}
public Price {get;}
}
Более того, типы Color
и Price
корректно выводятся из вашего запроса.
Ответ 2
Допустим, у вас есть такой класс:
class User
{
public int ID;
public string FirstName;
public string LastName;
public int Age;
public string City;
public string Country;
}
и вы создадите общий список, где T - класс пользователя. Вы создаете n количество пользователей.
Дело в том, что вы не хотите показывать все поля (или свойства) в каком-либо запросе, но только первое имя + имя (как одно) человека и город, в котором живет этот человек.
Таким образом, вы используете новое ключевое слово в Linq (я покажу, как использовать дон-нотацию Linq):
List<User> users = new List<User>();
users.Add(new User { ID = 1, FirstName = "first 1", LastName = "last 1", Age = 32, City = "City 1", Country = "Country 1" });
users.Add(new User { ID = 2, FirstName = "first 2", LastName = "last 2", Age = 33, City = "City 2", Country = "Country 2" });
users.Add(new User { ID = 3, FirstName = "first 3", LastName = "last 3", Age = 34, City = "City 3", Country = "Country 3" });
var query = users.Select(s => new
{
FIRST_LAST = string.Format("{0} {1}", s.FirstName, s.LastName),
LIVING_IN = s.City
}).ToList();
foreach (var person in query)
{
string name = person.FIRST_LAST;
string city = person.LIVING_IN;
}
Надеюсь, что это поможет,
свидания
Ответ 3
Как и в Linq, они используются приложениями asp.net MVC
в Global.asax.cs, отображающем маршруты
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Ответ 4
Некоторые веб-фреймворки используют их для представления атрибутов HTML-тегов:
var t = new Table(new { align="left", bgcolor="red", cellpadding="2" });
Ответ 5
Анонимные типы были добавлены в С# 3 для LINQ. Они великолепны, когда вам нужно только несколько свойств из базы данных, например. http://msdn.microsoft.com/en-us/library/bb397696.aspx:
var productQuery =
from prod in products
select new { prod.Color, prod.Price };
foreach (var v in productQuery)
{
Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}
Это приведет только к отображению столбцов "Цвет и цена" из базы данных:)
Ответ 6
Вы можете использовать его для генерации html-элементов.
В приведенном ниже примере используется метод el для генерации html-элементов с указанными атрибутами и innerHTML. параметр "params object [] objects" позволяет указать любое количество анонимных объектов для определения желаемых атрибутов html.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace anonymousTypes
{
class Program
{
static void Main(string[] args)
{
el("td", null, new { colspan = 36 }, new { style = "text-align: center;" });
Console.Read();
}
static string el(string tagName, string innerHTML, params object[] objects)
{
StringBuilder b = new StringBuilder();
b.Append("<").Append(tagName);
foreach (object obj in objects)
{
foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
{
Console.Write(propertyInfo.Name + " | " + propertyInfo.GetValue(obj, null) + "\n");
}
}
b.Append(">");
if (innerHTML != null)
b.Append(innerHTML);
b.Append("</").Append(tagName).Append(">");
return b.ToString();
}
}
}