Lou*_*hys 26 .net c# extension-methods enums type-conversion
使用扩展方法,我们可以创建方法通过创建扩展方法来枚举转换为其它数据类型(如String),INT ToInt()
,ToString()
等的枚举.
我想知道如何实现其他方式,例如FromInt(int)
,FromString(string)
等等.据我所知,我无法创建MyEnum.FromInt()
(静态)扩展方法.那么有什么可能的方法呢?
Jam*_*iec 34
我会避免使用枚举的扩展方法来污染int或字符串,而是一个好的老式静态助手类可能是有序的.
public static class EnumHelper
{
public static T FromInt<T>(int value)
{
return (T)value;
}
public static T FromString<T>(string value)
{
return (T) Enum.Parse(typeof(T),value);
}
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 21
你真的需要那些扩展方法吗?
MyEnum fromInt = (MyEnum)someIntValue;
MyEnum fromString = (MyEnum)Enum.Parse(typeof(MyEnum), someStringValue, true);
int intFromEnum = (int)MyEnum.SomeValue;
string stringFromEnum = MyEnum.SomeValue.ToString();
Run Code Online (Sandbox Code Playgroud)
反过来可能是......反过来;)使用泛型扩展方法扩展int和string ,它将枚举类型作为类型参数:
public static TEnum ToEnum<TEnum>(this int val)
{
return (TEnum) System.Enum.ToObject(typeof(TEnum), val);
}
Run Code Online (Sandbox Code Playgroud)
public static TEnum ToEnum<TEnum>(this string val)
{
return (TEnum) System.Enum.Parse(typeof(TEnum), val);
}
Run Code Online (Sandbox Code Playgroud)
用法:
var redFromInt = 141.ToEnum<System.Drawing.KnownColor>();
var redFromString = "Red".ToEnum<System.Drawing.KnownColor>();
Run Code Online (Sandbox Code Playgroud)
遗憾的是,Enums没有通用约束,因此我们必须在运行时检查TEnum类型; 为了简化我们将验证Enum.ToObject
和Enum.Parse
方法.
归档时间: |
|
查看次数: |
29206 次 |
最近记录: |