您好我不知道如何调用下一个功能,请您在这里帮助我。
函数检查值是否定义为枚举值。如果不是,则抛出异常。 警告:[标记]类型的枚举失败
public static T FailIfEnumIsNotDefined<T>(this T enumValue, string message = null)
where T:struct
{
var enumType = typeof (T);
if (!enumType.IsEnum)
{
throw new ArgumentOutOfRangeException(string.Format("Type {0} is not an Enum, therefore it cannot be checked if it is Defined not have defined.", enumType.FullName));
}
else if (!Enum.IsDefined(enumType, enumValue))
{
throw new ArgumentOutOfRangeException(string.Format("{1} Value {0} is not does not have defined value in Enum of type {0}. It should not be...", enumType.FullName, message ?? ""));
}
return enumValue;
}
我尝试过这样的事情,但是我收到了错误。
var valueFormatted = tobeTested.FailIfNullOrEmptyEnumerable<string>();
答案 0 :(得分:3)
此函数表示Enum类型的extension method
。您无法在string
上调用它,因为它正在尝试执行,因为它会在运行时爆炸。查看函数内部如何检查通用T
参数是否为枚举。不幸的是,枚举类型没有通用约束。
假设你有以下枚举类型:
public enum MyEnum
{
Foo, Bar, Baz
}
以及此枚举的一个实例:
MyEnum e = MyEnum.Bar;
你可以调用扩展方法:
e.FailIfEnumIsNotDefined();
或:
e.FailIfEnumIsNotDefined("some message");
另外,不要忘记通过在定义此方法的命名空间中添加正确的using指令,将扩展方法放在范围内。
答案 1 :(得分:0)
假设您已定义任何enum
:
public enum MyEnum
{
One,
Two
}
然后,您可以使用以下方法调用您的扩展方法:
MyEnum enumValue = MyEnum.One;
enumValue.FailIfEnumIsNotDefined<MyEnum>();
或
enumValue.FailIfEnumIsNotDefined<MyEnum>("error message");
答案 2 :(得分:0)
如果要解析任何字符串或对象,则应为字符串或对象创建扩展名,如下所示:
public static T FailIfEnumIsNotDefined<T>(this object enumValue, string message = null) where T : struct
{
var enumType = typeof(T);
if (!enumType.IsEnum)
{
throw new ArgumentOutOfRangeException("...");
}
else if (!Enum.IsDefined(enumType, enumValue))
{
throw new ArgumentOutOfRangeException("...");
}
return (T)Enum.Parse(enumType, enumValue.ToString());// (T)enumValue;
}
使用如下
var a = "One".FailIfEnumIsNotDefined<MyEnum>();
public enum MyEnum
{
One,
Two
}
这应该可以解决问题。
如果要为字符串创建扩展名,则无需在解析中执行ToString()。