Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 但这并不能真正解释为什么编译器不能找出5和10都可以是短的,除了明显的“因为它不能”。@ahruss编译器完全可以找出5和10都可以是短的。问题是,如果E表达式是否为B?X:Y其中B是一个非常数bool表达式,那么E始终被解释为一个非常数表达式,无论X和Y_C#_.net - Fatal编程技术网

C# 但这并不能真正解释为什么编译器不能找出5和10都可以是短的,除了明显的“因为它不能”。@ahruss编译器完全可以找出5和10都可以是短的。问题是,如果E表达式是否为B?X:Y其中B是一个非常数bool表达式,那么E始终被解释为一个非常数表达式,无论X和Y

C# 但这并不能真正解释为什么编译器不能找出5和10都可以是短的,除了明显的“因为它不能”。@ahruss编译器完全可以找出5和10都可以是短的。问题是,如果E表达式是否为B?X:Y其中B是一个非常数bool表达式,那么E始终被解释为一个非常数表达式,无论X和Y,c#,.net,C#,.net,但这并不能真正解释为什么编译器不能找出5和10都可以是短的,除了明显的“因为它不能”。@ahruss编译器完全可以找出5和10都可以是短的。问题是,如果E表达式是否为B?X:Y其中B是一个非常数bool表达式,那么E始终被解释为一个非常数表达式,无论X和Y是否为常数。如果X是5而Y是10,则这些表达式的类型都是int。因此,E是非常量,并且具有类型int。非常量int不能隐式转换为short@ahruss(续)编译器按常量与非常量进行推理-它不保留非常量变量的边界。您提出的推理要求编译器说B?5


但这并不能真正解释为什么编译器不能找出5和10都可以是短的,除了明显的“因为它不能”。@ahruss编译器完全可以找出5和10都可以是
短的。问题是,如果
E
表达式是否为
B?X:Y
其中
B
是一个非常数
bool
表达式,那么
E
始终被解释为一个非常数表达式,无论
X
Y
是否为常数。如果
X
5
Y
10
,则这些表达式的类型都是
int
。因此,
E
是非常量,并且具有类型
int
。非常量
int
不能隐式转换为
short
@ahruss(续)编译器按常量与非常量进行推理-它不保留非常量变量的边界。您提出的推理要求编译器说
B?5:10始终是
[5,10]
中的一个值。它不是等于value=5而不是10吗?对。这是匆忙写的。修正了。@Tyler:真的,对不起,取消了接近票数的投票。我给的那份副本不具体。说明编译时(=)和运行时(等于)之间的差异。此外,10>4将由编译器进行优化,其中一个变量在大部分时间都是经过检查的运行时(不是常数)可能完全正确的副本。对于
(short)(“test”==str?5:10)
“test”==str?之间的“学术”差异?(短)5:(短)10
,见我的答案。
short value;
value = 10 > 4 ? 5 : 10;
short value;
value = "test" == "test" ? 5 : 10;
short value;
string str = "test";
value = "test" == str ? 5 : 10;
short value;
string str = "test";
value = "test".Equals(str) ? 5 : 10;
short value;
value = 10 > 4 ? 5 : 10;             //1
value = "test" == "test" ? 5 : 10;   //2
string str = "test";
value = "test" == str ? 5 : 10;      //3
value = "test".Equals(str) ? 5 : 10; //4
value = "test" == "test" ? 5 : (int)short.MaxValue + 1;
value = 5;
value = (short)("test" == str ? 5 : 10);
value = 10 > 4 ? 5 : 10;
value = 5;
short value = 5;
const int huge = 10;
const int tiny = 4;
const int significant = 5;
const int unimporatnt = 10;
short value;
value = huge > tiny ? significant : unimportant;
short value = cond ? 5 : 10;
short value = cond ? (short)5 : (short)10;
short value = (short)(cond ? 5 : 10);