类型和可以为空的<type> </type>的扩展方法

时间:2009-04-12 20:09:50

标签: .net extension-methods

为简单起见,我们假设我想为int类型编写扩展方法?和int:

public static class IntExtentions
{
    public static int AddOne(this int? number)
    {
        var dummy = 0;
        if (number != null)
            dummy = (int)number;

        return dummy.AddOne();
    }

    public static int AddOne(this int number)
    {
        return number + 1;
    }
}

这可以仅使用1种方法完成吗?

2 个答案:

答案 0 :(得分:17)

不幸的是没有。你可以做int? (或者你使用的任何可空类型)方法很容易调用非可空方法,因此你不需要用2种方法复制任何逻辑 - 例如

public static class IntExtensions
{
    public static int AddOne(this int? number)
    {
        return (number ?? 0).AddOne();
    }

    public static int AddOne(this int number)
    {
        return number + 1;
    }
}

答案 1 :(得分:9)

不,你不能。这可以通过编译以下代码来实验验证

public static class Example {
  public static int Test(this int? source) {
    return 42;
  }
  public void Main() {
    int v1 = 42;
    v1.Test();  // Does not compile
  }
}

如果要在两种类型上使用它,则需要为每种类型(可为空且不可为空)编写扩展方法。