我有一个泛型返回类型的函数。如果value参数是有效的枚举值,则该方法返回相关的枚举值。
如何返回相关的枚举值?编译器错误:无法转换类型'int?'到'T'
public static T? GetEnumValue<T>(int? value)
{
if (value == null)
{
return null;
}
try
{
var enumValues = Enum.GetValues(typeof(T));
foreach (object enumValue in enumValues)
{
if (Convert.ToInt32(enumValue).Equals(value))
{
// ERROR: Cannot convert type 'int?' to 'T'
return (T)value;
}
}
}
catch (ArgumentNullException)
{
}
catch (ArgumentException)
{
}
catch
{
}
return null;
}
谢谢,
答案 0 :(得分:1)
使用Enum.ToObject方法,而不是使用Convert
类。
答案 1 :(得分:1)
三个变化使它对我有用。将返回类型更改为Nullable并添加到T:struct(从https://stackoverflow.com/a/209219/455904中取出)并在中间更改返回以返回枚举值。
public static Nullable<T> GetEnumValue<T>(int? value)
where T : struct
{
if (value == null)
{
return null;
}
try
{
var enumValues = Enum.GetValues(typeof(T));
foreach (object enumValue in enumValues)
{
if (Convert.ToInt32(enumValue).Equals(value))
{
return (T)enumValue;
}
}
}
catch (ArgumentNullException)
{
}
catch (ArgumentException)
{
}
catch
{
}
return null;
}