2017-06-06 74 views
1

是否这些2个扩展方法是相同的或者是有一些危险中使用的2通用扩展方法:接口

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 
} 

回答

1

唯一的区别是1在返回类型中,第一个将返回该类型本身并对其进行约束,以便它必须实现IMyInterface,而第二个将仅返回IMyInterface实例。

第二个对于当您只想公开接口的成员时很有用;第一个是当你需要返回原始类型,但确保你可以在方法中把它作为IMyInterface

+0

很好解释,没有想到在第二个实现中我只能使用接口成员的事实。而在第一个示例中,我可以使用所有成员,只需要是IMyInterface类型。 所以我需要在我的问题第一个:)。 –

+0

@Clint:如果'T'是一个结构? – apocalypse

+0

@apocalypse我从来不需要一个接口的结构,但如果它是一个结构可能是什么问题? –

1

除了@Clint答案:

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

2)如果你通过struct作为参数传递给非通用方法,预计接口 - 拳击将发生