如何创建accepts only a type of Integer, Long and String.
我知道我们可以限制单个类的类型,或者通过实现具有以下代码的接口
public class MyGenericClass<T> where T:Integer{ }
或处理int,long但不是字符串
public class MyGenericClass<T> where T:struct
是否可以创建一个只接受Integer,Long和String类型的泛型?
答案 0 :(得分:10)
您可能没有类声明中的约束,但在静态构造函数中进行一些类型检查:
public class MyGenericClass<T>
{
static MyGenericClass() // called once for each type of T
{
if(typeof(T) != typeof(string) &&
typeof(T) != typeof(int) &&
typeof(T) != typeof(long))
throw new Exception("Invalid Type Specified");
} // eo ctor
} // eo class MyGenericClass<T>
编辑:
正如Matthew Watson所指出的,真正的答案是“你不能也不应该”。如果您的面试官认为 不正确,那么您可能不想在那里工作;)
答案 1 :(得分:2)
我建议您使用构造函数来显示可接受的值,然后将值存储在对象中。如下所示:
class MyClass
{
Object value;
public MyClass(int value)
{
this.value = value;
}
public MyClass(long value)
{
this.value = value;
}
public MyClass(string value)
{
this.value = value;
}
public override string ToString()
{
return value.ToString();
}
}