2015-06-22 61 views
1

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

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

    } 
} 

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

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

+1

检查? – Loocid

+1

由于匿名类型不提供==运算符重载,也许你的意思是'object.Equals(htmlAttributes,new {})'。 –

+0

我宁愿用合适的构建器编写一个类,并根据您的需要构建对象。如果你没有设置任何属性,只需创建一个所谓的[空对象](https://sourcemaking.com/design_patterns/null_object)或返回'null'。 – ckruczek

回答

4

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

使用静态object.Equals,方法将做相应的null检查,然后调用虚拟的Equals第一个参数方法:

object.Equals(attributes, new { }); 

你也可以缓存静态实例如果你关心的开销的每个比较的分配。

2

如果空你的意思是没有属性,你可以使用反射:如果`null`

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

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