2

を持っているwin-formアプリに取り組んでいます。net 2.0フレームワークとして。リストに追加する前に、オブジェクトがすでに存在するかどうかを確認したいクラスのリストがあります。linqを使用してこれを実行できることはわかっ.Anyていますが、私の状況では機能しません。.containsオブジェクトは多くのプロパティを持っているため同じではないため、使用できません。そのため、オブジェクトがすでに追加されているかどうかを確認するための一意のプロパティが残っていますが、機能していません。コード:

bool alreadyExists = exceptionsList.Exists(item =>
       item.UserDetail == ObjException.UserDetail    
    && item.ExceptionType != ObjException.ExceptionType) ;

私のクラス

public class AddException
    {
        public string  UserDetail{ get; set; }
        public string  Reason { get; set; }
        public Enumerations.ExceptionType ExceptionType { get; set; }

    }
    public class Enumerations
    {
        public enum ExceptionType
        {
            Members = 1,
            Senders =2
        }
    }

初期の状況

AddException objException = new AddException
                {
                    Reason = "test",
                    UserDetail = "Ankur",
                    ExceptionType = 1
                };

このオブジェクトがリストに追加されます。

2回目

AddException objException = new AddException
                {
                    Reason = "test 1234",
                    UserDetail = "Ankur",
                    ExceptionType = 1
                };

これはリストに追加されるべきではありませんが、.Existチェックは失敗し、リストに追加されています。

助言がありますか。

4

3 に答える 3

3

Existsオブジェクトではなく既にboolを返すため、最後のnullチェックは機能しません。

bool alreadyExists = exceptionsList.Exists(item =>
        item.UserDetail == ObjException.UserDetail
     && item.ExceptionType == ObjException.ExceptionType
);

重要な部分は、あなたが変わらなければならないということです

item.ExceptionType != ObjException.ExceptionType

item.ExceptionType == ObjException.ExceptionType

UserDetailとが等しい項目があるかどうかを知りたいからですExceptionType

Enumsまた、int 値で初期化しないでください。だから変える

AddException objException = new AddException
{
    Reason = "test 1234",
    UserDetail = "Ankur",
    ExceptionType = 1
};

AddException objException = new AddException
{
    Reason = "test 1234",
    UserDetail = "Ankur",
    ExceptionType = Enumerations.ExceptionType.Members
};

(ちなみに、それはコンパイルさえすべきではありません)

于 2012-10-10T10:58:48.127 に答える
0

.Contains メソッドを使用できますが、オブジェクトに Equal メソッドを実装する必要があります。

このリンクを確認してください:

http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx

于 2012-10-10T10:58:10.430 に答える
0

これを試して

bool alreadyExists = exceptionsList.Exists(item => item.UserDetail == ObjException.UserDetail && item.ExceptionType != ObjException.ExceptionType);

ブール値を返します

于 2012-10-10T11:00:28.983 に答える