我使用的 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
,因此您可以在每个步骤中看到类型)。
关于c# - 将集合传递给方法的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926695/