【问题标题】:C# Extension Method for Null or valueNull 或值的 C# 扩展方法
【发布时间】:2010-10-21 13:34:55
【问题描述】:

如何编写一个扩展方法来检查对象的值,如果对象为空,那么 它应该返回 null 否则值{而不在接收端进行强制转换}。

类似...

public static object GetDefault(this object obj)
{
    if (obj == null) return null;
    else return obj;
}

我的意思是如果没有强制转换,我可以检查 null 吗?

int? a=a.GetDefault();

ContactType type=type.GetDefault();   [For EnumType]

string  s=a.GetDefault()

【问题讨论】:

  • 这个要求似乎毫无意义。只需将对象直接分配给可为空的类型即可。
  • 如果为null,则返回null,否则返回值...这与立即使用该值有何不同?
  • @GSerg 问题中的代码只是一个原型,缺少重要的一点。 :)(我希望)

标签: c# extension-methods


【解决方案1】:

这应该可行:

public static class ExtensionMethods
{
    public static T GetObject<T>(this T obj, T def)
    {
        if (default(T).Equals(obj))
            return def;
        else
            return obj;
    }
}

我添加了一个参数def,因为我希望您希望在 obj 为 null 时返回此默认值。否则,您始终可以省略 T def 参数并返回 null

【讨论】:

  • 不需要def 参数。这就是 default 关键字的用途。
  • 在这个方法很有用的世界里,return obj ?? def;
  • @Oded,我假设这允许你说foo.GetDefault(new Foo { Bar = 7 }),如果foo 为空,它会给你一些Foo 的默认实例。
  • @Anthony Pegram - 更好的是:return obj ?? default(T);
  • @Oded - 必须如此,否则 null 合并运算符将无用,检查 null 也是如此。但看起来他偷偷地编辑了答案,所以我正在评论现在更改的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多