我有以下代码。
public static void GuessTheType()
{
dynamic hasValue = true;
dynamic value = "true";
var whatami1 = hasValue ? (string)value : null;
var whatami2 = hasValue ? bool.Parse(value) : true;
var whatami3 = hasValue ? (bool)bool.Parse(value) : true;
}
编译器为whatami1
推断的类型是string
编译器为whatami2
推断的类型是dynamic
编译器为whatami3
推断的类型为bool
。
为什么第二种类型不是bool
?
答案 0 :(得分:2)
要扩展PetSerAl的评论,该评论解释为什么它被视为动态的,您可以通过将值转换为字符串来避免将bool.Parse
的调用视为动态:
var whatami2 = hasValue ? bool.Parse((string)value) : true;
答案 1 :(得分:1)
Casting是我们断言(对编译器来说)一个对象确实是别的东西 - 例如:
var whatami1 = hasValue ? (string)value : null;
var whatami3 = hasValue ? (bool)bool.Parse(value) : true;
最后,解析是从没有内在关系的表单中解释一个值 - 即动态(即值)和var(即whatami2)之间没有直接关系,但我们可以解析:
var whatami2 = hasValue ? bool.Parse(value) : true;