Skip to main content
 首页 » 编程设计

c#之将集合传递给方法的格式

2024年02月24日30rubylouvre

我使用的 API 具有需要此类参数的方法:

System.Collections.ObjectModel.Collection<GenericTickType> genericTickList 

如何为该参数实例化一个对象?这是我尝试过的方法,但它一直说方法调用有一些无效参数。

List<TickType> ticks_to_get = new List<TickType> { TickType.Price }; 

我试过直接实例化一个 Collection 而不是一个 List,但这似乎不起作用。

请您参考如下方法:

"I've tried instantiating a Collection directly instead of a List and that doesn't seem to work."

你得到了什么错误?您绝对可以创建 Collection<T> 的实例直接地说,它不是一个抽象类,它有几个公共(public)构造函数,包括一个无参数的构造函数。你可以这样做,例如:

var values = new System.Collections.ObjectModel.Collection<int> { 1,2,3,4 }; 

我注意到您的示例代码有一个 GenericTickType和一个 TickType .这是一个错误还是您实际上有两个类(class)?你说它是一个枚举(哪个?),所以一个不可能从另一个派生。如果它们是两个枚举类型,Collection<GenericTickType>和 Collection<TickType>是两个不同的类,一个不能分配给另一个。

现在,如果TickType 可类型转换到GenericTickType (如果它们都是枚举,并且假设它们共享相同的数值,它们可能是),您仍然无法转换 Collection<TickType>至 Collection<GenericTickType> .对于大多数类(在 C# 4 中),C# 中还没有对立/协变。但是你可以施放每个 TickType通过做这样的事情:

List<GenericTickType> list = new List<GenericTickType> { (GenericTickType)TickType.Price }; 
list.Add((GenericTickType)TickType.Price); // add more... 
Collection<GenericTickType>genericTicks = new Collection<GenericTickType>(list); 

如果您已经有一个 List<TickType>并且可以访问 C# 3.0 和 LINQ,您可以这样做:

List<TickType> ticks = new List<TickType> { TickType.Price }; 
list.Add(TickType.Price); // add more... 
List<GenericTickType> castedList = ticks.Cast<GenericTickType>().ToList(); 
Collection<GenericTickType>genericTicks = new Collection<GenericTickType>(castedList); 

这使用了 LINQ Cast<T>()和 ToList<T>() each 的扩展方法 TickType在原始列表中为 GenericTickType并创建一个新的 List<GenericTickType>用于实例化 Collecion<GenericTickType> . (我避免使用 var,因此您可以在每个步骤中看到类型)。