相关疑难解决方法(0)

可空类型和三元运算符:为什么是`?10:null`禁止?

我刚刚遇到一个奇怪的错误:

private bool GetBoolValue()
{
    //Do some logic and return true or false
}
Run Code Online (Sandbox Code Playgroud)

然后,在另一种方法中,这样的事情:

int? x = GetBoolValue() ? 10 : null;
Run Code Online (Sandbox Code Playgroud)

很简单,如果方法返回true,则为Nullable intx 赋值10 .否则,将null赋给nullable int.但是,编译器抱怨:

错误1无法确定条件表达式的类型,因为int和之间没有隐式转换<null>.

我疯了吗?

.net c# nullable conditional-operator

242
推荐指数
6
解决办法
7万
查看次数

条件运算符不能隐式转换?

我对这个小C#quirk感到有点难过:

给定变量:

Boolean aBoolValue;
Byte aByteValue;
Run Code Online (Sandbox Code Playgroud)

以下编译:

if (aBoolValue) 
    aByteValue = 1; 
else 
    aByteValue = 0;
Run Code Online (Sandbox Code Playgroud)

但这不会:

aByteValue = aBoolValue ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

错误说:"不能隐式地将类型'int'转换为'byte'."

当然,这个怪物会编译:

aByteValue = aBoolValue ? (byte)1 : (byte)0;
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

编辑:

使用VS2008,C#3.5

c# types conditional-operator implicit-cast

61
推荐指数
3
解决办法
4797
查看次数

条件运算符会混淆,但为什么呢?

假设两个类,都是同一个超类的后代,如下所示:

class MySuperClass{}
class A : MySuperClass{}
class B : MySuperClass{}
Run Code Online (Sandbox Code Playgroud)

然后这个赋值不会通过编译器:

MySuperClass p = myCondition ? new A() : new B();
Run Code Online (Sandbox Code Playgroud)

编译器抱怨A和B不兼容(无法确定条件表达式的类型,因为'A'和'B'之间没有隐式转换 [CS0173]).但它们都是MySuperClass类型,所以在我看来这应该有效.不是说这是一个大问题; 只需要一个简单的强制转换即可启发编译器.但肯定是C#编译器的一个障碍?你不同意吗?

c# compiler-construction inheritance

5
推荐指数
1
解决办法
673
查看次数

使用奇怪的错误?操作者

可能重复:
无法确定条件表达式的类型?

我目前写了这样的声明:

byte? Col_8 = (Rad_8.SelectedValue == null) ? null : byte.Parse(Rad_8.SelectedValue);
Run Code Online (Sandbox Code Playgroud)

但它有这个错误:

无法确定条件表达式的类型,因为'<null>'和之间没有隐式转换'byte'

为什么我之后可以使用null ??如果相当于上面的代码没有if声明怎么办?

.net c# c#-4.0

1
推荐指数
1
解决办法
109
查看次数