簡體   English   中英

Enum.TryParse 在泛型中不被接受,僅限於 Enum

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM