下面的空条件运算符有什么问题?
What is wrong with the below Null-Conditional Operator?
有什么问题
public int Add(int? a, int? b)
{
return (a?.0 + b?.0);
}
编译错误:无法将类型 'int?' 隐式转换为 'bool'
只是想尝试以 C#6.0 的方式添加两个可为 null 的整数。
我也知道其他方法(比如 hasvalue 等),但我正在试验这个新运算符。
嗯,首先,当 x
是 int?
时,x?.0
没有任何意义。 0
不是 属性 或 int?
上的方法。
您似乎在尝试使用空合并运算符 ??
而不是空条件运算 ?.
。如果是这种情况,您的方法应如下所示:
public int Add(int? a, int? b)
{
return a ?? 0 + b ?? 0;
}
如果不是这种情况,你的意思是 ?.
那么你可以使用 int
的扩展方法测试这个运算符,它的值只是 return:
public static int Identity(this int value)
{
return value;
}
并像您最初尝试的那样使用它(但使用 int?
):
public int? Add(int? a, int? b)
{
return a?.Identity() + b?.Identity();
}
但是,如果您只想将这些 int?
参数组合在一起,则不需要任何新的东西。这很管用:
public int? Add(int? a, int? b)
{
return (a + b);
}
当两个参数都不是 null
时,两个选项都会 return 结果,否则会 return null
.
有什么问题
public int Add(int? a, int? b)
{
return (a?.0 + b?.0);
}
编译错误:无法将类型 'int?' 隐式转换为 'bool'
只是想尝试以 C#6.0 的方式添加两个可为 null 的整数。
我也知道其他方法(比如 hasvalue 等),但我正在试验这个新运算符。
嗯,首先,当 x
是 int?
时,x?.0
没有任何意义。 0
不是 属性 或 int?
上的方法。
您似乎在尝试使用空合并运算符 ??
而不是空条件运算 ?.
。如果是这种情况,您的方法应如下所示:
public int Add(int? a, int? b)
{
return a ?? 0 + b ?? 0;
}
如果不是这种情况,你的意思是 ?.
那么你可以使用 int
的扩展方法测试这个运算符,它的值只是 return:
public static int Identity(this int value)
{
return value;
}
并像您最初尝试的那样使用它(但使用 int?
):
public int? Add(int? a, int? b)
{
return a?.Identity() + b?.Identity();
}
但是,如果您只想将这些 int?
参数组合在一起,则不需要任何新的东西。这很管用:
public int? Add(int? a, int? b)
{
return (a + b);
}
当两个参数都不是 null
时,两个选项都会 return 结果,否则会 return null
.