我正在开发一款我没有设计的应用,并且不会以这种方式设计它。我有一个列表要映射到Dictionary<string, object>
。生成的字典应如下所示:
var dictionary = new Dictionary<string, object>{
{ CommonProperty.Name, item.Name },
{ CommonProperty.UriAddr, item.UriAddr}
//other properties
}
CommonProperty
是一个具有静态属性的密封类,例如Name
,UriAddr
等。我尝试过类似的事情: -
我试图利用下面的Linq查询而陷入困境:
var dict = myList.Select((h, i) => new { key = h, index = i })
.ToDictionary(o => o.key, o => values[o.index]));
和...
foreach(var item in list){
var _dict = new Dictionary<string, object>{
{CommonProperty.Name, item.Name},
//other properties
}
}
CommonProperty
会向该属性添加其他信息,因此必须进行调用。键和值都是相同的名称&#39;。
我的问题是:如何映射myList
并返回上面的字典?还有更好的方法吗?
提前致谢。
答案 0 :(得分:1)
你究竟是什么意思“关键和价值都是相同的'名字'”?如果您想要在项目中的键匹配项目中的属性名称,那么您可以使用反射,如下所示:
item.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(item));
此示例不会通过CommonProperty进行过滤,如果项目具有您不感兴趣的任何属性,则可能会导致字典中的额外条目。
以下是完整的示例程序,它显示目录中所有文件的属性:
static class Program
{
static Dictionary<string, object> ObjToDic(object o)
{
return o.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(o));
}
static void Main(string[] args)
{
var fileNames = Directory.EnumerateFiles("c:\\windows");
foreach (string name in fileNames)
{
Console.WriteLine("==========================================");
FileInfo fi = new FileInfo(name);
var propDict = ObjToDic(fi); // <== Here we convert FileInfo to dictionary
foreach (var item in propDict.AsEnumerable())
{
Console.WriteLine(string.Format("{0}: {1}", item.Key, item.Value.ToString()));
}
}
}
}
请记住,在.NET中有属性和字段。在C#中使用相同的语法读取和写入两者,但反射处理它们的方式不同。上面的示例仅显示属性。
答案 1 :(得分:1)
从您的示例中我看到您希望将每个列表项映射到Dictionary。请尝试以下代码:
char data[1000] = "foo";
appendchar(data, 'b');
appendchar(data, 'a');
appendchar(data, 'r');
puts(data);