为什么C#推断这种类型是动态的?

Cam*_*and 6 c# type-inference

我有以下代码.

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;
}
Run Code Online (Sandbox Code Playgroud)

编译器推断的类型whatami1string.
编译器推断的类型whatami2dynamic.
编译器推断的类型whatami3bool.

为什么第二种类型不是bool

Ric*_*lay 2

为了扩展 PetSerAl 的注释,解释了为什么它被视为动态,您可以bool.Parse通过将值转换为字符串来避免将调用视为动态:

var whatami2 = hasValue ? bool.Parse((string)value) : true;
Run Code Online (Sandbox Code Playgroud)