我确信这个问题的答案很简单,但我试图编写一个if语句(C#5.0)来确定匿名类型是否为空。这是我的代码的简化版本:
public void DoSomething(object attributes)
{
// This is the line I need??
if (atrributes != new {}) {
}
}
属性变量根据需要动态创建,有时候是空的。
那么如何确定匿名类型是否为空?
答案 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