一尘不染

通用方法多重(OR)类型约束

c#

阅读本文,我了解到有可能通过使方法成为通用方法来允许方法接受多种类型的参数。在示例中,以下代码与类型约束一起使用,以确保“
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
}

一如既往地感谢您的帮助!


阅读 272

收藏
2020-05-19

共1个答案

一尘不染

这是不可能的。但是,您可以为特定类型定义重载:

public void test(string a, string arg);
public void test(string a, Exception arg);

如果它们是泛型类的一部分,则它们将比该方法的泛型版本更可取。

2020-05-19