我有一个通用的方法我可以将泛型方法限制为多个接口吗?
public static void DoSomething<T>()
{...}
。现在我想限制T.
public static void DoSomething<T>() where T: IInterface1
{...}
但我真正想要的是允许多个接口,像
public static void DoSomething<T>() where T: IInterface1, IInterface2
{...}
但是,这并不工作。编译器说有点像
There's no implicit conversion from IInterface1 to IInterface2
There's no implicit conversion from IInterface2 to IInterface1
我想过让类实现一个通用的接口,我可以参考但我没有访问类。
我有什么可能允许多个接口?
感谢, 托比
编辑:这就是我想做的事。我正在开发一个Outlook-Add-In。我经常使用下面的这段代码。
public static object GetItemMAPIProperty<T>(AddinExpress.MAPI.ADXMAPIStoreAccessor adxmapiStoreAccessor, object outlookItem, uint property) where T: Outlook.MailItem, Outlook.JournalItem
{
AddinExpress.MAPI.MapiItem mapiItem;
mapiItem = adxmapiStoreAccessor.GetMapiItem(((T)outlookItem));
return mapiItem != null ? mapiItem.GetProperty(property) : null;
}
的方法GetMapiItem需要一个对象,只要它是Outlook的项目(杂志,邮件,联系人,...)之一。这就是为什么我限制T的原因。因为它不能,比如说Outlook.MAPIFolder。
不,我已经改变了方法
public static object GetItemMAPIProperty<T>(AddinExpress.MAPI.ADXMAPIStoreAccessor adxmapiStoreAccessor, T outlookItem, uint property)
{
AddinExpress.MAPI.MapiItem mapiItem;
mapiItem = adxmapiStoreAccessor.GetMapiItem(((T)outlookItem));
return mapiItem.GetProperty(property);
}
但由于该方法GetMapiItem接受对象,开发人员(在这种情况下我)可以给它的任何类型。我希望这是有道理的。我不确定它是否适用于这个例子,但我想将一个泛型方法限制为多个类型(使用OR)可能是一个好主意。
你的目标是什么框架,你是用Visual Studio编译的,哪个版本?我在这里VS 2008与.NET 3.5和上面的编译就好了。你确定你给我们的例子就是你所拥有的。 – 2009-07-28 16:30:31
,因为那样你说编译器T应该是IInterface1和IInterface2而不是 – 2009-07-28 16:31:42
他提供的代码有效,他只需要说方法来获取IInterface1或IInterface2的参数 – 2009-07-28 16:34:51