c# - 通用字符串到枚举的转换

标签 c# generics

假设枚举:

public enum SysLogsAppTypes { None, MonitorService, MonitorTool };

这里是一个将 ToString() 表示转换回 enum 的函数:

private SysLogsAppTypes Str2SysLogsAppTypes(string str)  
{  
    try  
    {  
        SysLogsAppTypes res = (SysLogsAppTypes)Enum
                                       .Parse(typeof(SysLogsAppTypes), str);  
        if (!Enum.IsDefined(typeof(SysLogsAppTypes), res)) 
            return SysLogsAppTypes.None;  
        return res;  
    }  
    catch  
    {  
    return SysLogsAppTypes.None;  
    }  
}  

有没有办法让这个通用??

我试过:

private T Str2enum<T>(string str)   
{  
    try  
    {  
        T res = (T)Enum.Parse(typeof(T), str);  
        if (!Enum.IsDefined(typeof(T), res)) return T.None;  
        return res;  
    }  
    catch  
    {  
        return T.None;  
    }  
}  

但我得到: “T”是“类型参数”,在给定上下文中无效
哪里有T.None

有什么帮助吗? 谢谢

最佳答案

我认为 default关键字是你需要的:

private T Str2enum<T>(string str) where T : struct
{   
    try   
    {   
        T res = (T)Enum.Parse(typeof(T), str);   
        if (!Enum.IsDefined(typeof(T), res)) return default(T);   
        return res;   
    }   
    catch   
    {   
        return default(T);   
    }   
}   

关于c# - 通用字符串到枚举的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877706/

相关文章:

java - 如何递归引用泛型参数?

c# - 在 C# 中用空值或空值初始化元组

java - 使用原始类型实现通用接口(interface)

c# - Xamarin 'Resource.Layout' 不包含 'Tabbar' 错误的定义

C# 嵌套标签的正则表达式

c# - 无法将类型 'byte' 转换为 'T'

Swift:通用幂函数作为中缀运算符

c# - 如何将泛型类的对象复制到具有继承类型的另一个对象?

c# - SqlDataAdapter.Fill(DataTable) 未填充 DataTable

c# - 我可以避免存储 MS Exchange 凭据,同时仍然能够进行身份验证(针对 EWS)吗?