使用T:Interface的通用扩展方法

时间:2017-06-06 12:09:22

标签: generics c#-4.0 extension-methods

这两种扩展方法是否相同,或者在使用2

中的1时存在一些危险
public static T  GetSomthingFromListOf<T>(this List<T> list)where T: IMyInterface
{
    //do somthing that returns an item of T
}

对战

public static IMyInterface GetSomthingFromList(this List<IMyInterface> list)
{
    //do somthing that returns an item of IMyInterface
}

2 个答案:

答案 0 :(得分:1)

唯一真正的区别在于返回类型,第一个将返回类型本身并约束它以便它必须实现IMyInterface,第二个将返回IMyInterface实例。

当您只想公开界面的成员时,第二个是有用的;当您需要返回原始类型时,第一个是有用的,但请确保您可以在方法中将其视为IMyInterface

答案 1 :(得分:1)

除了@Clint回答:

1)如果你有List<ConcreteType>的实例 - 只有通用扩展方法可用

2)如果您将struct作为参数传递给非泛型方法,该方法需要接口 - 将发生装箱