一个字典,其中value是C#中的匿名类型

aba*_*hev 38 .net c# linq dictionary anonymous-types

是否可以在C#中创建System.Collections.Generic.Dictionary<TKey, TValue>where TKey无条件类,以及TValue- 具有许多属性的匿名类,例如 - 数据库列名和它的本地化名称.

像这样的东西:

new { ID = 1, Name = new { Column = "Dollar", Localized = "??????" } }
Run Code Online (Sandbox Code Playgroud)

ito*_*son 44

你不能直接声明这样的字典类型(有kludges但这些仅用于娱乐和新颖目的),但是如果你的数据来自IEnumerable或IQueryable源,你可以使用LINQ ToDictionary运算符获得一个并突出显示序列元素中所需的键和(匿名类型)值:

var intToAnon = sourceSequence.ToDictionary(
    e => e.Id,
    e => new { e.Column, e.Localized });
Run Code Online (Sandbox Code Playgroud)


Ðаn*_*Ðаn 18

正如itowlson 所说,你不能宣布这样的野兽,但你确实可以创造一个:

static IDictionary<TKey, TValue> NewDictionary<TKey, TValue>(TKey key, TValue value)
{
    return new Dictionary<TKey, TValue>();
}

static void Main(string[] args)
{
    var dict = NewDictionary(new {ID = 1}, new { Column = "Dollar", Localized = "??????" });
}
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚为什么你真的想要使用这样的代码.

  • 为什么?我可以想到很多原因.这是一个.例如,考虑用于记忆n元函数的字典,例如四个int参数的函数.在CLR的下一个版本中,您当然只使用4元组,但在C#3中,您可以创建一个匿名类型的字典{int,int,int,int},完成,无需定义自己的字典元组类型. (10认同)
  • 我现在有另一个条目用于我个人主页的"名人堂刷"部分!:-) (9认同)