Mar*_*tus 2 c# abstraction interface list
在我的接口中,通常有一个IList<ISomeType>代表List类型的成员,并且说我期望一个支持Add方法的实现.
但是在接口实现中,有一个
IList<ISomeType> = new List<ISomeType>()
Run Code Online (Sandbox Code Playgroud)
例如,每当我使用List时,我都必须进行转换
(this.MyList as List<IMyType>).AddRange(someType.ToList());
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?如何避免这种演员?
- 编辑以询问更多信息 -
而不是扩展方法,是否有一个小的linq表达式来解决这个问题?
IList<string> list = new List<string>();
var items = new[] { "1", "2", "3" };
items.ToList().ForEach(x => list.Add(x));
Run Code Online (Sandbox Code Playgroud)
但这看起来并不是很直接,因为它颠覆了正在做的事情.(操作在要添加的项目上,而不在列表中).
有什么比这更好的?可以在列表上做些什么?
AddRange不是IList上的方法,但是Add is,因此您可以轻松地创建扩展方法:
public static void AddRange<T>(this IList<T> list, IEnumerable<T> values) {
foreach(var value in values)
list.Add(value);
}
Run Code Online (Sandbox Code Playgroud)
您还可以在扩展方法中检查列表是否实际上是List的实例,在这种情况下,您可以直接调用AddRange
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |