我有两个具有相同属性的对象:
ObservableCollection<A> FooA
ObservableCollection<B> FooB
模型A
和B
都有共同属性。我已创建此方法来更新属性而不创建冗余代码:
public static void UpdateItemInCollection(A person, ObservableCollection<A> collection)
{
foreach (var m in collection)
{
m.Name = m.id == person.id;
}
}
但我只能传递参数FooA
。我怎么能通过FooB?
答案 0 :(得分:0)
如果该属性实际上代表两个类中的相同类型的数据,则必须使用接口或父(最可能是抽象)类。
public interface INamed
{
string Name { get; }
}
public Person : INamed
{
public string Name {get; set;}
// etc.
}
public People : INamed
{
public string Name {get; set;}
// etc.
}
public static void UpdateItemInCollection(INamed person, ObservableCollection<INamed> collection)
{
foreach (var m in collection)
{
m.Name = m.id == person.id;
}
}
答案 1 :(得分:0)
您可以为这两个类创建一个界面:
public interface AandB
{
string Name { get; set; }
}
然后在类中实现它:
public interface AandB
{
string Name { get; set; }
}
public class A : AandB
{
public string Name { get; set; }
public string id { get; set; }
}
class B : AandB
{
public string Name { get; set; }
public string id { get; set; }
}
修改您的方法以获取界面而不是类:
public static void UpdateItemInCollection(AandB person, ObservableCollection<AandB> collection)
{
foreach (var m in collection)
{
m.Name = "whatever";
}
}
集合必须是接口类型:
ObservableCollection<AandB> FooA;
ObservableCollection<AandB> FooB;
最后,您可以使用这两个类调用该方法:
FooA = new ObservableCollection<AandB>();
A objA = new A();
objA.id = "1";
objA.Name = "test";
FooA.Add(objA);
FooB = new ObservableCollection<AandB>();
B objB = new B();
objB.id = "1";
objB.Name = "test";
FooB.Add(objB);
UpdateItemInCollection(objA, FooA);
UpdateItemInCollection(objB, FooB);