[英]Why does C# infer this type as dynamic?
我有以下代碼。
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
?
為了擴展PetSerAl的注釋,它解釋了為什么它被視為動態的,你可以通過將值轉換為字符串來避免將bool.Parse
的調用視為動態:
var whatami2 = hasValue ? bool.Parse((string)value) : true;
轉換是我們斷言(對編譯器)一個對象確實是其他東西 - 例如:
var whatami1 = hasValue ? (string)value : null;
var whatami3 = hasValue ? (bool)bool.Parse(value) : true;
最后,解析是從沒有內在關系的表單中解釋一個值 - 即動態(即值)和var(即whatami2)之間沒有直接關系,但我們可以解析:
var whatami2 = hasValue ? bool.Parse(value) : true;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.