检查List <Guid>和List <Dictionary <string,object >>之间的差异

时间:2019-11-08 17:53:36

标签: c# list dictionary

我试图弄清楚如何检查列表中是否有字典或像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"]

2 个答案:

答案 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()

由于多种原因,第二种情况比较困难:

  1. 因为您获得了词典的列表。因此,您必须仔细研究List元素,才能找到拥有所需数据或键的东西。
  2. 因为您获得了词典列表。 Wich意味着您必须决定要使用ContainsKey()还是ContainsValue()检查。

如果我们有一些有关这些类型的实际示例,那将有很大帮助。这还不足以给您提供更多的一般指导。

P.S .:请不要在通用类中将object用作类型。它破坏了安全型。实际上,引入了泛型,因此我们最终可以停止使用对象。我们仍然像过去的幽灵一样,在名称空间中散布着那些泛型集合。