C# 将泛型T限制为特定类型
我有以下方法:C# 将泛型T限制为特定类型,c#,generics,C#,Generics,我有以下方法: public static IResult<T, String> Validate<T>(this T value) { } // Validate 公共静态IResult验证(此T值){ }//验证 如何将T限制为Int16、Int32、Int64、Double和String?您只能执行以下操作: public static IResult<T, String> Validate<T>(this T value) where
public static IResult<T, String> Validate<T>(this T value) {
} // Validate
公共静态IResult验证(此T值){
}//验证
如何将T限制为Int16、Int32、Int64、Double和String?您只能执行以下操作:
public static IResult<T, String> Validate<T>(this T value) where T: int
{
//validate
}
公共静态IResult验证(此T值),其中T:int
{
//证实
}
只有类和接口可以用作约束。此类泛型约束不可用。使用泛型最接近您想要实现的目标是添加以下约束:
public static IResult<T, String> Validate<T>(this T value)
: where T IConvertible, IComparable, IComparable<T>, IEquatable<T>
{
// Validate
}
这不是最好的解决方案,但至少它会给您一点编译时安全性和运行时安全性。您不能以这种方式限制泛型,只能选择一个类作为约束。您必须创建5个重载,或者找到一个接口,所有这5个东西都共享并使用它。您选择哪个选项将取决于什么
Validate
doe
下面是如何执行重载的
public static IResult<Int16, String> Validate<T>(this Int16 value) {
} // Validate
public static IResult<Int32, String> Validate<T>(this Int32 value) {
} // Validate
public static IResult<Int54, String> Validate<T>(this Int64 value) {
} // Validate
public static IResult<double, String> Validate<T>(this double value) {
} // Validate
public static IResult<String, String> Validate<T>(this String value) {
} // Validate
可能是通过为这些类型创建一个具有5个重载的非泛型方法。无法限制特定于编译时的泛型方法。在这种情况下,泛型没有任何好处,因为您无法从int派生某些东西
public static IResult<Int16, String> Validate<T>(this Int16 value) {
} // Validate
public static IResult<Int32, String> Validate<T>(this Int32 value) {
} // Validate
public static IResult<Int54, String> Validate<T>(this Int64 value) {
} // Validate
public static IResult<double, String> Validate<T>(this double value) {
} // Validate
public static IResult<String, String> Validate<T>(this String value) {
} // Validate
public static IResult<T, String> Validate<T>(this T value) where IConvertible {
} // Validate