访问名称中带有“/”的动态 属性
Access dynamic property with "/" in name
我正在使用 CsvHelper 从 CSV 文件创建动态对象。
我遇到的问题是有时名称中有非法字符,如下所示:
无论如何我可以做这样的声明:
if (record.Towm/Area == "foo") ...
因为它是动态的,所以我不认为我可以使用反射来循环它并通过字符串比较检查名称。
我是否可以通过命名数组或其他方法访问它?
直接使用列号访问列,例如 record.GetField(3)
甚至 record.GetField("Town/Area")
等
那你可以比较一下,
if (String.Equals(record.GetField(3), "foo"))
{
//do my stuff.
}
因为它是 ExpandoObject
,您应该能够像 IDictionary
:
一样使用索引器获取属性
if(record["Town/Area"] == "foo")
除此之外,您可以将其转换为 IDictionary
,并照此处理。
((IDictionary<String, Object>)record)
然后使用 linq 获得更多过度设计的优点:
if( record.First(kvp => kvp.Key == "City/Town").Value == foo )
我正在使用 CsvHelper 从 CSV 文件创建动态对象。
我遇到的问题是有时名称中有非法字符,如下所示:
无论如何我可以做这样的声明:
if (record.Towm/Area == "foo") ...
因为它是动态的,所以我不认为我可以使用反射来循环它并通过字符串比较检查名称。
我是否可以通过命名数组或其他方法访问它?
直接使用列号访问列,例如 record.GetField(3)
甚至 record.GetField("Town/Area")
等
那你可以比较一下,
if (String.Equals(record.GetField(3), "foo"))
{
//do my stuff.
}
因为它是 ExpandoObject
,您应该能够像 IDictionary
:
if(record["Town/Area"] == "foo")
除此之外,您可以将其转换为 IDictionary
,并照此处理。
((IDictionary<String, Object>)record)
然后使用 linq 获得更多过度设计的优点:
if( record.First(kvp => kvp.Key == "City/Town").Value == foo )