有没有办法转换Dictionary<string, obj>
为对象集合,使得集合中的每个对象都包含键作为另一个属性
这是 obj 的类 def
class someclass
{
string property1;
string property2;
}
转换后,我希望集合中的每个对象都像
obj.property1
obj.property2
obj.Key
从那以后我一直在努力解决这个问题,我寻求一些帮助。有任何想法吗?
提前致谢。
有没有办法转换Dictionary<string, obj>
为对象集合,使得集合中的每个对象都包含键作为另一个属性
这是 obj 的类 def
class someclass
{
string property1;
string property2;
}
转换后,我希望集合中的每个对象都像
obj.property1
obj.property2
obj.Key
从那以后我一直在努力解决这个问题,我寻求一些帮助。有任何想法吗?
提前致谢。
就像是
var myCollection = from de in myDictionary
select new
{
de.Value.property1,
de.Value.property2,
de.Key
}.ToList(); // or .ToArray()
应该做的伎俩。
这将返回具有您请求的属性的新匿名类型的列表。
您还可以(除了匿名类型 apporach)使用List<Tuple<string, string, string>>
:
var list= dictionary
.Select(kv => Tuple.Create(kv.Value.property1, kv.Value.property2, kv.Key))
.ToList();
foreach(var item in list)
{
Console.WriteLine("property1:{0 property2:{1} key:{2}"
, item.Item1
, item.Item2
, item.Item3);
}
与匿名类型相比的优点是您可以Tuple
轻松地从方法中返回。
编辑:第三个选项(我最喜欢的)是简单地创建您在某处声明的类的实例。这是理想的方式。我不知道为什么我认为您想要“即时”上课。
class someOtherClass
{
public string property1{ get; set; };
public string property2{ get; set; };
public string Key{ get; set; };
}
List<someOtherClass> objects = dictionary
.Select(kv => new someOtherClass(){
property1 = kv.Value.property1,
property2 = kv.Value.property2,
Key = kv.Key
})
.ToList();
如果您不想像这样存储结果,则可以使用匿名类型:例如,如果您只是想将其用作数据源。
var res = myDictionary.Select(pair => new { pair.Key, pair.Value.Property1, pair.Value.Property2 });
其他答案都很好,所以这只是一个补充。
您可以使用Length
三个数组:
var arrays = myDictionary
.Select(kv => new[] { kv.Value.property1, kv.Value.property2, kv.Key, });
或者你可以写一个新的类
class SomeclassAndKey
{
public string property1;
public string property1;
public string Key;
}
然后说
var someclassAndKeys = myDictionary
.Select(kv => new SomeclassAndKey { property1 = kv.Value.property1, property2 = kv.Value.property2, Key = kv.Key, });
.ToList()
在每种情况下,如果您不想推迟枚举并得到一个完整的结果,您可以追加List<>
。