为简单起见,我们假设我想为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种方法完成吗?
答案 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
}
}
如果要在两种类型上使用它,则需要为每种类型(可为空且不可为空)编写扩展方法。