c# – 我可以将泛型方法限制为多个接口吗?

c# – 我可以将泛型方法限制为多个接口吗?,第1张

概述我有一个通用的方法 public static void DoSomething<T>(){...} .现在我想限制那个T. public static void DoSomething<T>() where T: IInterface1{...} 但我真正想要的是允许多个接口,例如 public static void DoSomething<T>() where T: IInterface 我有一个通用的方法
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的一个项目(Journal,Mail,Contact,…).这就是为什么我限制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);    }

但是开发人员(在本例中为I)可以为其提供任何类型,因为GetMAPIItem方法接受一个对象.我希望这是有道理的.我不确定它是否适用于该示例,但我想将通用方法限制为多个类型(使用OR)可能是一个好主意.

解决方法 这对我来说很好:
interface I1 { int NumberOne { get; set; } }interface I2 { int NumberTwo { get; set; } }static voID DoSomething<T>(T item) where T:I1,I2{    Console.Writeline(item.NumberOne);    Console.Writeline(item.NumberTwo);}

所以语法看起来很好……也许是导致问题的其他因素.

总结

以上是内存溢出为你收集整理的c# – 我可以将泛型方法限制为多个接口吗?全部内容,希望文章能够帮你解决c# – 我可以将泛型方法限制为多个接口吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存