相关疑难解决方法(0)

三元运算符行为不一致

以下表达式是可以的

short d = ("obj" == "obj" ) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

但是当您像下面一样使用它时,会发生语法错误

short d = (DateTime.Now == DateTime.Now) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)

任何人都可以解释为什么会这样吗?

在三元运算符中比较字符串到字符串和datetime到datetime之间有区别吗,为什么?

如果你能帮助我,我将不胜感激.

c# int casting short conditional-operator

51
推荐指数
2
解决办法
1535
查看次数

在C#中,为什么不能将条件运算符隐式地转换为可空类型

我很好奇为什么隐式演员会失败...

int? someValue = SomeCondition ? ResultOfSomeCalc() : null;
Run Code Online (Sandbox Code Playgroud)

为什么我必须执行显式演员

int? someValue = SomeCondition ? ResultofSomeCalc() : (int?)null;
Run Code Online (Sandbox Code Playgroud)

在我看来,编译器具有进行隐式转换决策所需的所有信息,不是吗?

c# nullable conditional-operator

30
推荐指数
3
解决办法
1万
查看次数

使用条件运算符时没有隐式转换

我有以下课程:

abstract class AClass { }
class Foo : AClass { }
class Bar : AClass { }
Run Code Online (Sandbox Code Playgroud)

当我试图使用它们时:

AClass myInstance;
myInstance = true ? new Foo() : new Bar();
Run Code Online (Sandbox Code Playgroud)

此代码将无法编译,因为"无法确定条件表达式的类型,因为'CSharpTest.Class1.Foo'和'CSharpTest.Class1.Bar'之间没有隐式转换"

但是以下样本编译好了:

if (true)
{
    myInstance = new Foo();
}
else
{
    myInstance = new Bar();
}
Run Code Online (Sandbox Code Playgroud)

这也没问题:

myInstance = true ? (AClass) new Foo() : new Bar();
Run Code Online (Sandbox Code Playgroud)

要么

myInstance = true ? new Foo() : (AClass) new Bar();
Run Code Online (Sandbox Code Playgroud)

为什么条件运算符和if子句的行为有如此大的差异?

c# oop

15
推荐指数
2
解决办法
4232
查看次数

标签 统计

c# ×3

conditional-operator ×2

casting ×1

int ×1

nullable ×1

oop ×1

short ×1