C#多个通用约束

Pat*_*ick 22 c# generics constraints

我想知道是否可以添加多个通用约束?

我有一个Add方法,它接受一个Object(电子邮件,电话或地址),所以我想的是:

public void Add<T>(T Obj) 
    where T : Address
    where T : Email
    where T : Phone
{
    if (Obj is Address)
        m_Address.Add(Obj as Address);
    else if (Obj is Email)
        m_Email.Add(Obj as Email);
    else
        m_Phone.Add(Obj as Phone);
}
Run Code Online (Sandbox Code Playgroud)

但我一直在:

"A constraint clause has already been specified for type parameter 'T'. All of the constraints for a type parameter must be specified in a single where clause."

Gre*_*ech 25

你不能这样做.为什么不只是有三种方法让编译器为你努力工作?

public void Add(Address address) { m_Address.Add(address); }
public void Add(Email email) { m_Email.Add(email); }
public void Add(Phone phone) { m_Phone.Add(phone); }
Run Code Online (Sandbox Code Playgroud)


Ant*_*lev 9

CLR不允许多重继承,这正是您要表达的内容.你想T成为Address,Email一个Phone在同一时间(我认为这些都是类名).因此是不可能的.更重要的是,整个方法毫无意义.您要么必须为所有三个类引入基本接口,要么使用Add方法的三个重载.

  • @Anton,我认为OP正在询问OR约束(而不是AND). (9认同)

Adr*_*ong 5

如何为这三种类型创建接口或基类?

但是看看你的代码,似乎你没有足够好地使用通用.使用泛型的关键是你不需要将它转换为任何特定的类型(在这种情况下,你是).