我有一個通用的方法我可以將泛型方法限制爲多個接口嗎?
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