我相信这个答案很简单,但我试图编写一个if语句(C#5.0)来确定匿名类型是否为空。以下是我的代码的简化版本:如何确定匿名类型的对象是否为空?
public void DoSomething(object attributes)
{
// This is the line I need??
if (atrributes != new {}) {
}
}
根据需要动态创建属性变量,有时它是空的。
那么如何确定匿名类型是否为空?
我相信这个答案很简单,但我试图编写一个if语句(C#5.0)来确定匿名类型是否为空。以下是我的代码的简化版本:如何确定匿名类型的对象是否为空?
public void DoSomething(object attributes)
{
// This is the line I need??
if (atrributes != new {}) {
}
}
根据需要动态创建属性变量,有时它是空的。
那么如何确定匿名类型是否为空?
匿名类型不为==
提供运算符重载,尽管在这种情况下它并不重要,因为其中一个参数是类型化对象。但是,C#编译器确实提供了Equals,GetHashCode和ToString实现。
使用静态object.Equals
,方法将做相应的null检查,然后调用虚拟的Equals第一个参数方法:
object.Equals(attributes, new { });
你也可以缓存静态实例如果你关心的开销的每个比较的分配。
如果空你的意思是没有属性,你可以使用反射:如果`null`
var o1 = new {};
o1.GetType().GetProperties().Count(); //==0
var o2 = new {test=1};
o2.GetType().GetProperties().Count(); //==1
检查? – Loocid
由于匿名类型不提供==运算符重载,也许你的意思是'object.Equals(htmlAttributes,new {})'。 –
我宁愿用合适的构建器编写一个类,并根据您的需要构建对象。如果你没有设置任何属性,只需创建一个所谓的[空对象](https://sourcemaking.com/design_patterns/null_object)或返回'null'。 – ckruczek