以下表达式是可以的
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之间有区别吗,为什么?
如果你能帮助我,我将不胜感激.
我很好奇为什么隐式演员会失败...
int? someValue = SomeCondition ? ResultOfSomeCalc() : null;
Run Code Online (Sandbox Code Playgroud)
为什么我必须执行显式演员
int? someValue = SomeCondition ? ResultofSomeCalc() : (int?)null;
Run Code Online (Sandbox Code Playgroud)
在我看来,编译器具有进行隐式转换决策所需的所有信息,不是吗?
我有以下课程:
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子句的行为有如此大的差异?