除了LINQ查询,你如何在C#中使用匿名类型?

its*_*att 5 c# anonymous-types

我一直在努力加快C#中一些较新的功能,其中一个我没有用过的是匿名类型.

我理解它与LINQ查询有关的用法,我查看了这个SO帖子,它提出了类似的问题.我在网上看到的大多数例子都与LINQ查询有关,这很酷.我看到了一些有些人为的例子,但实际上并没有看到很多有价值的东西.

您是否对匿名类型有一种新颖的用途,您认为它真的为您提供了一些实用工具?

Bra*_*ger 6

通过一些反射,您可以将匿名类型转换为Dictionary <string,object>; Roy Osherove在此博客论述了他的技术:http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

Jacob Carpenter使用匿名类型作为初始化不可变对象的方法,其语法类似于对象初始化:http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

匿名类型可用作为使用foreach语句迭代的集合中的对象属性提供更易于读取的别名的方法.(虽然,老实说,这只不过是LINQ to Objects标准使用匿名类型.)例如:

Dictionary<int, string> employees = new Dictionary<int, string>
{
    { 1, "Bob" },
    { 2, "Alice" },
    { 3, "Fred" },
};

// standard iteration
foreach (var pair in employees)
    Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);

// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
    Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);
Run Code Online (Sandbox Code Playgroud)

虽然这个简短的样本没有太大的改进,但是如果foreach循环更长,那么指的是ID并且Name可能提高可读性.


yfe*_*lum 5

ASP.NET MVC路由在整个地方使用这些对象.