我试图弄清楚如何检查列表中是否有字典或像Guid这样的单一值。 尝试过使用Type,但仅定义Array或Object,有人有什么建议吗?
JArray P = R as JArray;
try
{
JTokenType Type = P.Type;
Result = P.ToObject<List<Dictionary<string, object>>>();
}
catch (Exception e)
{
}
又快又脏,我本想捕捉错误的,但视野不好。
似乎信息不正确,对象是
List<SomeClass>
或
List<Guid>
示例数据:
[
{
"Id": "45c41ef8-a030-4480-820d-5bd6bf02bf14",
"UserId": "246fef1a-e85e-49be-9aad-7d32c8144580",
"Type": 351208,
"Name": "*******il.com",
"isDirect": true,
"Active": true,
"History": []
}
]
或
["b0d2dd7d-018c-43ad-9c70-8ec9a3f41978"]
答案 0 :(得分:1)
我不确定,但是我认为您想知道如何检查列表是否包含Dictionary。但是由于Dictionary是通用类型,因此如果您要了解Dictionary内容的特定类型,想要使用is
即这是你的问题:
//can't do
if(myList[0] is Dictionary)
//can only do this
if(myList[0] is Dictionary<string, object>)
相反,我们必须执行以下操作:
Type t = myList[0].GetType();
bool isDict = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>);
如果您还想知道字典中的类型,请检查t.GetGenericArguments()
返回的数组
有关演示,请参见此提琴:https://dotnetfiddle.net/oyyivN
答案 1 :(得分:0)
如果您要检查单个List<T>
,它只是普通的Contains()。
由于多种原因,第二种情况比较困难:
如果我们有一些有关这些类型的实际示例,那将有很大帮助。这还不足以给您提供更多的一般指导。
P.S .:请不要在通用类中将object用作类型。它破坏了安全型。实际上,引入了泛型,因此我们最终可以停止使用对象。我们仍然像过去的幽灵一样,在名称空间中散布着那些泛型集合。