代码之家  ›  专栏  ›  技术社区  ›  Wei Lin

如何反射检查空对象是IDictionary

  •  1
  • Wei Lin  · 技术社区  · 4 年前

    如何反射检查空对象是IDictionary

    例如:

    is 要检查的关键字。

    void Main()
    {
        Dictionary<string, object> v = new Dictionary<string,object>();
        Console.WriteLine(CheckValueIsIDictionary(v)); //true
    }
    
    bool CheckValueIsIDictionary(object value){
        return value is IDictionary;
    }
    

    false

    void Main()
    {
        Dictionary<string, object> v = null;
        Console.WriteLine(CheckValueIsIDictionary(v)); //false
    }
    
    bool CheckValueIsIDictionary(object value){
        return value is IDictionary;
    }
    

    我希望你能 true 结果,谢谢!


    更新:

    在示例之前,您可以知道这个空值来自 Dictionary<string,object> IDictionary 我想得到恋爱的结果。

    我为什么要这么做:

    我想检查值是IDictionary还是不做不同的逻辑,对象值可以是Array或Dictionary<int,int>或List

    1 回复  |  直到 4 年前
        1
  •  2
  •   ProgrammingLlama Raveena Sarda    4 年前

    只能使用类型推断和泛型执行此操作:

    public static bool CheckValueIsIDictionary<T>(T value)
    {
        Type typeT = typeof(T);
        return value is IDictionary || typeof(IDictionary).IsAssignableFrom(typeof(T));
    }
    

    很明显,如果你有这样的东西,你会 false

    Dictionary<string, string> myDictionary = null;
    object o = myDictionary;
    Console.WriteLine(CheckValueIsIDictionary(o));
    

    但在有值的地方,或者在编译时已知类型的地方,它将工作。