0

以下の例clientListでは、2 番目の例で 5 つのクライアントを含めるにはどうすればよいでしょうか?

メソッドで文字列と文字列list.Contains()のみをチェックし、等しいかどうかをチェックするときに年齢を無視する必要があります。FNameLName

struct client
{
    public string FName{get;set;}
    public string LName{get;set;}
    public int age{get;set;}
}

例 1:

List<client> clientList = new List<client>();

for (int i = 0; i < 5; i++)
{
    client c = new client();
    c.FName = "John";
    c.LName = "Smith";
    c.age = 10;

    if (!clientList.Contains(c))
    {
        clientList.Add(c);
    }
}

//clientList.Count(); = 1

例 2:

List<client> clientList = new List<client>();

for (int i = 0; i < 5; i++)
{
    client c = new client();
    c.FName = "John";
    c.LName = "Smith";
    c.age = i;

    if (!clientList.Contains(c))
    {
        clientList.Add(c);
    }
}

//clientList.Count(); = 5
4

4 に答える 4

2

IEqualityComparer を実装するクラスを作成し、 list.contains メソッドでオブジェクトを渡します

于 2013-02-28T11:03:02.477 に答える
1
public class Client : IEquatable<Client>
{
  public string PropertyToCompare;
  public bool Equals(Client other)
  {
    return other.PropertyToCompare == this.PropertyToCompare;
  }
}
于 2013-02-28T11:04:31.533 に答える
1

オーバーライドEqualsGetHashCode、構造内で:

struct client
{
    public string FName { get; set; }
    public string LName { get; set; }
    public int age { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null || !(obj is client))
            return false;
        client c = (client)obj;

        return
            (string.Compare(FName, c.FName) == 0) &&
            (string.Compare(LName, c.LName) == 0);
    }

    public override int GetHashCode()
    {
        if (FName == null)
        {
            if (LName == null)
                return 0;
            else
                return LName.GetHashCode();
        }
        else if (LName == null)
            return FName.GetHashCode();
        else
            return FName.GetHashCode() ^ LName.GetHashCode();
    }
}

この実装は、すべてのエッジ ケースを処理します。

この質問を読んで、なぜオーバーライドする必要があるのか​​ を理解してくださいGetHashCode()

于 2013-02-28T11:22:30.973 に答える
0

C# 3.0 以降を使用している場合は、次のようにしてみてください。

(次のコードはテストされていませんが、ほぼ正しいはずです)

List<client> clientList = new List<client>();

for (int i = 0; i < 5; i++)
{
    client c = new client();
    c.FName = "John";
    c.FName = "Smith";
    c.age = i;

    var b = (from cl in clientList
             where cl.FName = c.FName &&
                   cl.LName = c.LName
             select cl).ToList().Count() <= 0;

    if (b)
    {
        clientList.Add(c);
    }
}
于 2013-02-28T11:18:21.940 に答える