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

本文关键字:对象 是否 类型 何确定 | 更新日期: 2023-09-27 17:57:23

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

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

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

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

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

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

使用静态 object.Equals , 方法,该方法将执行适当的空检查,然后在第一个参数上调用虚拟 Equals 方法:

object.Equals(attributes, new { });

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

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

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