2017-09-25 85 views
1

我有两个对象,像这样相同的属性:具有与单一参数相同属性的对象?

ObservableCollection<A> FooA 
ObservableCollection<B> FooB 

两个模型AB有一个共同的特性。我创造了这个方法更新的属性,而不创建冗余代码:

public static void UpdateItemInCollection(A person, ObservableCollection<A> collection) 
    { 
     foreach (var m in collection) 
     { 
      m.Name = m.id == person.id; 
     } 
    } 

但我只能通过作为参数FooA。我怎么能通过FooB?

+2

做一个接口,这两个类A''和'B' – Pikoh

+0

而且顺便说一句, 'm.Name = m.id == person.id;'只在'Name'是一个布尔属性时才起作用 – Pikoh

回答

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; 
    } 
} 
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"; 
    }  
} 

T他收藏必须是接口类型:

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); 
相关问题