[英]Enum.TryParse not accepted in generic restricted to Enum
我想我可能在做一些愚蠢的事情,但我正在嘗試編寫一個通用函數,該函數接受一個string
並將其轉換為一個enum
(然后做了一些我為了簡潔而跳過的其他內容)。 問題是,它抱怨Enum.TryParse
需要一個不可為空的類型,它抱怨 T 可以為空; 看似System.Enum
為空,但實際枚舉不可為空。 是我在這里做錯了什么還是有辦法解決這個問題。
private T GetEnumFilter<T>(string strValue) where T : Enum
{
return Enum.TryParse(strValue, out T value) ? value : throw new Exception("Invalid value");
}
我看過這個https://stackoverflow.com/a/8086788/1093406答案和dotnet 樣本中的樣本,但看不出我做錯了什么。
看似 System.Enum 可以為空,但實際枚舉不可為空。
是的,就像System.ValueType
是引用類型一樣,但值類型本身不是。
你只需要添加一個struct
約束:
private T GetEnumFilter<T>(string value) where T : struct, Enum
這編譯,例如:
private static T GetEnumFilter<T>(string value) where T : struct, Enum =>
Enum.TryParse(value, out T result) ? result : throw new Exception("Invalid value");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.