背景:
我有一个很大的解决方案,其中数百个函数将强类型集合作为参数集并将它们用作返回值。
该解决方案引用生成的代理,该代理将调用转换为始终以int []或Order []或wathever类型的格式返回集合的Web服务。代理将它们包装为IntCollection或OrderCollection。
现在我想直接引用程序集。当我这样做时,我得到了针对数组的接口而不是代理生成的强类型集合。这当然会破坏所有代码。
我正在寻找一种智能的方法来处理这个并避免重写数千行代码。
有什么想法吗?
答案 0 :(得分:2)
IntCollection
等属于你吗?您可以添加隐式转换运算符:
class IntCollection : Collection<int> {
public IntCollection() : base() { }
public IntCollection(IList<int> data) : base(data) { }
public static implicit operator int[](IntCollection items) {
return items.ToArray(); // LINQ, but can do manually
}
public static implicit operator IntCollection (int[] items){
return new IntCollection(items);
}
}
通常,这将是接口(IList<Foo>
等)帮助的时间之一 - 但接口在Web服务中通常不能很好地工作。根据代码当前的功能,您可能可以执行“替换所有”修复 - 但有点激烈;除此之外......你将不得不改变奇数位的代码。
一些想法:
var
(在C#3.0中)可以最小化更改 - 即var orders = svc.GetOrders()
;在大多数情况下,不同的实现将具有“足够相似”的API
.ToList()
,.ToArray()
)可以作为垫片答案 1 :(得分:0)
从数组中创建强类型集合。例如,您可以从数组创建通用列表。
int[] oIntArray;
List<int> = new List<int>(oIntArray);