[英]Nullable value types & type safety with 'if not null checking' in c#. Does C# have 'Type promotion'?
在其他語言(例如 Dart)中,如果您執行if (x != null)
檢查,則 x 將被提升為不可為空的類型。 c# 有類型提升嗎? C#有什么限制? 例如if (x is Y)
或在切換命令和其他場景中?
我注意到在 C# 中可空類型不會提升為不可空類型。 有沒有可以打開的功能或者這是語言的限制?
public enum eColours { blue }
public class ColourClass {
public eColours? call(string colour) {
if (colour == "blue")
return eColours.blue;
return null;
}
public string describeColour(eColours colour) => colour.ToString();
}
var obj = new ColourClass();
var result = obj.call("blue");
if (result is not null) {
var description1 = obj.describeColour(result); //error here
}
編輯
我要解決的特定解決方案在if
表達式中有&&
子句? (其中 color 和 pet 都是枚舉?)
if (colour != null && pet != null pet)
雖然被測試的變量本身不會被提升,但您可以稍微擴展您對is
運算符的使用以實現您所追求的:
if (result is eColours nonNullResult) {
var description1 = obj.describeColour(nonNullResult);
}
如果類型檢查成功,此語法將類型檢查和轉換為另一個變量結合起來; nonNullResult
的類型具體是eColours
,而不是eColours?
,並且您不再收到轉換錯誤。
在該語言的更高版本中,您還可以使用以下格式專門檢查非空:
if (result is { } nonNullResult)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.