2017-07-19 89 views
0

我有5組lists,我需要比較。要求是使用通用方法來做到這一點。通用方法來比較兩個列表

例如,我有列表TeacherStudentTeacher具有TeacherId作爲其標識符,而Student具有StudentId。是否有可能創造條件,採取的方法:

var result = Compare (teacherA, teacherB, "TeacherId"); 
var result = Compare (studentA, studentB, "StudentId"); 

它可能類似於此頂端回答一句:How can I create a generic method to compare two list of any type. The type may be a List of class as well

但這是否意味着我要創建每個每個list 5點型IComparable的方法呢?對不起,我對C#很陌生。

回答

2

取決於你正在做什麼類型應該實現這些接口中的一個或兩個:IEquitable如果你只是想看看他們是相同的。 IComparable如果你想排序/排序實例。

實施應該在類型上完成,因此StudentTeacher都將實現這些接口。如果你想比較StudentTeacher您可以使用不同的參數的通用(即class Student : IEquitable<Student>, IEquitable<Teacher>

沒有必要在這裏使用泛型實現相同的接口。

+1

絕對推薦使用的框架結構爲這裏提出的接口。 –

0

看起來好像你有非常相似的類,你可以創建一個像Person這樣的基類,例如,使用屬性Id,然後在繼承類中重寫它。之後,您可以比較ID。

public class Person 
{ 
    public virtual string Id { get; set; } 

    // ... 
} 

public class Student : Person 
{ 
    public override string Id { get; set; } 

    // ... 
} 

// ... 
0

您應該爲此使用接口。

interface ICompareById { 
    int Id { get; } 
} 

class Student : ICompareById { 
    int Id { get; set; } 
    int StudentId { get { return this.Id; } 
} 

class Teacher : ICompareById { 
    int Id { get; set; } 
    int TeacherId { get { return this.Id; } 
} 

class IdComp : IComparer<ICompareById> 
{ 
    int Compare(ICompareById x, ICompareById y) 
    { 
     return Comparer<int>.Default.Compare(x.Id, y.Id); 
    } 
} 

要找到共同的要素:

teacherList.Intersect(studentList, new IdComp());