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
成功了。谢谢你的帮助。