如何确定匿名类型的对象是否为空?

时间:2015-06-22 05:23:43

标签: c# .net

我确信这个问题的答案很简单,但我试图编写一个if语句(C#5.0)来确定匿名类型是否为空。这是我的代码的简化版本:

public void DoSomething(object attributes)
{
    // This is the line I need??
    if (atrributes != new {}) {

    }
}

属性变量根据需要动态创建,有时候是空的。

那么如何确定匿名类型是否为空?

2 个答案:

答案 0 :(得分:4)

匿名类型不为==提供运算符重载,尽管在这种情况下无关紧要,因为其中一个参数是类型化对象。但是,C#编译器确实提供了Equals,GetHashCode和ToString实现。

使用静态object.Equals方法进行相应的空检查,然后在第一个参数上调用虚拟Equals方法:

object.Equals(attributes, new { });

如果您担心每次比较的分配开销,也可以缓存静态实例。

答案 1 :(得分:2)

如果为空则表示没有属性,则可以使用反射:

var o1 = new {};
o1.GetType().GetProperties().Count(); //==0

var o2 = new {test=1};
o2.GetType().GetProperties().Count(); //==1