为了在Sql server中有更好的可读性,我把Enum用String来模拟。定义了一个Class来实现: public abstract class StrEnum<T> : IEquatable<T>
where T : StrEnum<T>
{
......
public static bool IsValid(string value)
{
//如果是合法值就返回true,否则false。
}
}
当我想声明一个ENUM的时候,我这样做:public sealed class StrEnumColor : StrEnum<StrEnumColor>
{
....
}现在我想写一个函数来判断一个字符串,是不是合法的Enum值,我想用函数模板来表示,这里我想添加一个限制,即类型参数T,都是从StrEnum派生下来的,这样我可以调用基类StrEnum中的IsValid:public bool ValidateEnum<T>(string paramValue, string paramName) where T : StringEnumData<T>
{
return (!String.IsNullOrEmpty(paramValue) && T.IsValid(paramValue);
}
这里C#编译器告诉我,T是一个类型参数,不能这样写。
请问如果想达到我的要求(即限制类型参数T,都是从StrEnum派生下来的,这样我可以调用基类StrEnum中的IsValid),我该怎么写?谢谢!
where T : StrEnum<T>
{
......
public static bool IsValid(string value)
{
//如果是合法值就返回true,否则false。
}
}
当我想声明一个ENUM的时候,我这样做:public sealed class StrEnumColor : StrEnum<StrEnumColor>
{
....
}现在我想写一个函数来判断一个字符串,是不是合法的Enum值,我想用函数模板来表示,这里我想添加一个限制,即类型参数T,都是从StrEnum派生下来的,这样我可以调用基类StrEnum中的IsValid:public bool ValidateEnum<T>(string paramValue, string paramName) where T : StringEnumData<T>
{
return (!String.IsNullOrEmpty(paramValue) && T.IsValid(paramValue);
}
这里C#编译器告诉我,T是一个类型参数,不能这样写。
请问如果想达到我的要求(即限制类型参数T,都是从StrEnum派生下来的,这样我可以调用基类StrEnum中的IsValid),我该怎么写?谢谢!
return (!String.IsNullOrEmpty(paramValue) && StrEnum<T>
.IsValid(paramValue);