C# 作为参数和接口传递的ObservableCollection
我有一个接口C# 作为参数和接口传递的ObservableCollection,c#,interface,observablecollection,C#,Interface,Observablecollection,我有一个接口IPerson和两个类,adventorer和Worker来实现它。目前,我为冒险家和工人提供了单独的observedcollections。我有一个方法,我希望能够将observateCollection和observateCollection作为参数传递给,到目前为止,我还没有任何运气。该方法仅使用在IPerson中实现的属性,如果我将其声明为: public void MyMethod(ObservableCollection<IPerson> collection
IPerson
和两个类,adventorer
和Worker
来实现它。目前,我为冒险家和工人提供了单独的observedcollection
s。我有一个方法,我希望能够将observateCollection
和observateCollection
作为参数传递给,到目前为止,我还没有任何运气。该方法仅使用在IPerson
中实现的属性,如果我将其声明为:
public void MyMethod(ObservableCollection<IPerson> collection)
public void MyMethod(observeablecollection集合)
…方法本身内部没有错误。但是,当我尝试传入一个可观测集合时,我得到两个错误:
无法从“System.Collections.ObjectModel.ObservableCollection”转换为“System.Collections.ObjectModel.ObservableCollection”`
及
与“AoW.MyMethod(System.Collections.ObjectModel.ObservableCollection)”匹配的最佳重载方法具有一些无效参数`
我是否可以将这两个observateCollection
s传递给同一个方法?如果是的话,我应该怎么做?任何建议都将不胜感激。你不能这样做,因为
ObservableCollection<IPerson>
observedcollection
是
它本身是另一种类型(例如,您可以将冒险家或工作者放在其中,但不能将其放在冒险家或工作者的集合中)
解决方案可以是在方法中允许IPerson的IEnumerable,然后使用以下方法调用它:
ObservableCollection<Worker> col = ...
MyMethod(col.Cast<IPerson>());
ObservableCollection列=。。。
MyMethod(col.Cast());
你不能这样做,因为
ObservableCollection<IPerson>
observedcollection
是
它本身是另一种类型(例如,您可以将冒险家或工作者放在其中,但不能将其放在冒险家或工作者的集合中)
解决方案可以是在方法中允许IPerson的IEnumerable,然后使用以下方法调用它:
ObservableCollection<Worker> col = ...
MyMethod(col.Cast<IPerson>());
ObservableCollection列=。。。
MyMethod(col.Cast());
NET中的类不支持。只有接口可以。想象一下这个场景:
class Adventurer : IPerson { }
class NPC : IPerson { }
public void MyMethod(ObservableCollection<IPerson> collection)
{
collection.Add(new NPC());
}
var collectionOfAdventurers = new ObservableCollection<Adventurer>();
MyMethod(collectionOfAdventurers);
或
具体取决于您需要访问哪些成员
您可能还需要考虑一个泛型方法:
public void MyMethod<T>(ObservableCollection<T> collection) where T : IPerson
public void MyMethod(ObservableCollection集合),其中T:IPerson
NET中的类不支持。只有接口可以。想象一下这个场景:
class Adventurer : IPerson { }
class NPC : IPerson { }
public void MyMethod(ObservableCollection<IPerson> collection)
{
collection.Add(new NPC());
}
var collectionOfAdventurers = new ObservableCollection<Adventurer>();
MyMethod(collectionOfAdventurers);
或
具体取决于您需要访问哪些成员
您可能还需要考虑一个泛型方法:
public void MyMethod<T>(ObservableCollection<T> collection) where T : IPerson
public void MyMethod(ObservableCollection集合),其中T:IPerson
更改为IEnumerable
成功了。谢谢你的帮助。更改为IEnumerable
成功了。谢谢你的帮助。