【发布时间】:2012-06-05 17:29:50
【问题描述】:
阅读this,我了解到可以通过将其设为泛型方法来允许方法接受多种类型的参数。在示例中,以下代码与类型约束一起使用,以确保“U”是IEnumerable<T>。
public T DoSomething<U, T>(U arg) where U : IEnumerable<T>
{
return arg.First();
}
我发现了一些允许添加多个类型约束的代码,例如:
public void test<T>(string a, T arg) where T: ParentClass, ChildClass
{
//do something
}
但是,此代码似乎强制arg 必须同时是ParentClass 和 ChildClass 的类型。我想做的是说 arg 可以是ParentClass 或 ChildClass的类型,方式如下:
public void test<T>(string a, T arg) where T: string OR Exception
{
//do something
}
我们一如既往地感谢您的帮助!
【问题讨论】:
-
在这种方法的主体中以通用方式你能做什么有用(除非多种类型都派生自一个特定的基类,在这种情况下为什么不将其声明为类型约束)?
-
@Damien_The_Unbeliever 不确定你所说的身体是什么意思?除非您的意思是允许任何类型并手动检查正文...以及我要编写的实际代码(最后一个代码 sn-p),否则我希望能够传递字符串 OR 异常,所以有那里没有类关系(我想象的 system.object 除外)。
-
还要注意写
where T : string是没有用的,因为string是一个密封类。您可以做的唯一有用的事情是为string和T : Exception定义重载,正如@Botz3000 在下面的回答中所解释的那样。 -
但是当没有关系时,你可以在
arg上调用的唯一方法是object定义的方法——所以为什么不从图片中删除泛型并制作arg的类型@ 987654338@?你得到了什么? -
@Mansfield 您可以创建一个接受对象参数的 private 方法。两个重载都会调用那个。这里不需要泛型。
标签: c# asp.net-mvc-3 types