2017-05-16 1 views
0

クラスの辞書を作成していますが、 "ContainsValue"メソッドを使用できません。助けてください辞書型のクラスContainsValueの使用方法

私のクラス:

class clsAttendance 
    { 
     public string TagId { get; set; } 
     public DateTime LastFoundDate { get; set; } 
     public DateTime CapturedAt { get; set; } 
    } 

私の辞書:

私は特定のタグIDが辞書に存在するかどうかをチェックしたい
private Dictionary<int, clsAttendance> dicAttendance = new Dictionary<int, clsAttendance>(); 

、私はこのようにすることが、働いていない午前:

clsAttendance clsAtt = new clsAttendance(); 
clsAtt.TagId = 123456AANN; 
//---- Check if RFID exists in dictionary or not 
bool rfidExists = dicAttendance.ContainsValue(clsAtt); 

答えて

2

クラスclsAttendanceは、Equalsを無効にするか、IEquatable<clsAttendance>を実装する必要があります。それ以外の場合は、同じ参照の場合にのみ見つかります。常にGethashCodeも上書きします。

この例ではとにかく推奨されているの両方を示しています

public class clsAttendance : IEquatable<clsAttendance> 
{ 
    public string TagId { get; set; } 
    public DateTime LastFoundDate { get; set; } 
    public DateTime CapturedAt { get; set; } 

    public override bool Equals(object obj) 
    { 
     var otherAttendance = obj as clsAttendance; 
     if (otherAttendance == null) 
     { 
      return false; 
     } 

     return this.Equals(otherAttendance); 
    } 

    public override int GetHashCode() 
    { 
     return (this.TagId != null ? this.TagId.GetHashCode() : 0); 
    } 

    public bool Equals(clsAttendance other) 
    { 
     if (ReferenceEquals(null, other)) return false; 
     if (ReferenceEquals(this, other)) return true; 
     return string.Equals(this.TagId, other.TagId); 
    } 
} 
+0

値が存在するかどうかをチェックする際にこれを使用する方法...どのようなメソッドを呼び出す必要がありますか? –

+0

'icAttendance.ContainsValue(clsAtt);' –

+0

ありがとうございました。出来た。 –

1

bool rfidExists = dicAttendance.Values.Any(a => a.TagId.Equals("123456AANN")); 
+0

LINQを使用することなく、他の方法を? –

+0

はい、TimSchmelterの答えを参照してください:-) – wkl

+0

'foreach(var a in dicAttendance.Values){if(a.TagId.Equals(" 123456AANN ")){return true; }} return false; ' – Corak

関連する問題