public static object GetObject(int x)
{
return new object { };
}
public static object GetObject(string x)
{
return new object { };
}
public static void ProcessObject<T>(T x) where T : int, string <= got error here:
{
object o = GetObject(x);
}
得到错误“用作约束的类型必须是接口,未密封的类或类型参数”。
我如何重写代码以使其工作而无需两次编写
ProcessObject(int x)
和ProcessObject(string x)
? 最佳答案
因此,您现在所拥有的(根据公认的答案和您的评论)是:
public static void ProcessObject<T>(T x)
{
object o;
if (typeof(T) == typeof(int))
o = GetObject((int)(object)x);
else if (typeof(T) == typeof(string))
o = GetObject((string)(object)x);
else
throw new Exception();
// do stuff with o
}
我建议公开
int
和string
重载,但是为了防止代码重复,请在内部调用另一个方法:public static void ProcessObject(int x)
{
ProcessObject(GetObject(x));
}
public static void ProcessObject(string x)
{
ProcessObject(GetObject(x));
}
private static void ProcessObject(object o)
{
// do stuff with o
}
这使您的
public
方法的输入值清晰可见:int
和string
是唯一可接受的类型,同时仍然不会重复您的实际逻辑(// do stuff with o
)。您可能不喜欢这两个公共的
ProcessObject
方法是彼此重复的(无论如何,从表面上看;在幕后,它们调用了两个不同的GetObject
重载),但我认为这是最好的选择。