0

データを追加する List クラスを作成しました。私の要件は、データが存在する場合はデータを更新し、そうでない場合はデータを追加することです。いくつかのコードを試しましたが、エラーが発生しました。

public class Subject
{
    public string m_SubjectId { get; set; }
    public double m_Marks { get; set; }
    public double m_NegativeMarks { get; set; }
    public double m_TotalMarks { get; set; }


    public void AddSubjectDeatils(string SubjectId, double Marks, double NegativeMark)
    {
        List<Subject> lst = new List<Subject>();
        var temp = lst.Single(l => l.m_SubjectId == SubjectId);
        if (temp != null)
        {
            temp.m_Marks += Marks;
            temp.m_NegativeMarks += NegativeMark;
            temp.m_TotalMarks += Marks;                
        }
        else
        {
            m_SubjectId = SubjectId;
            m_Marks = Marks;
            m_NegativeMarks = NegativeMark;
            m_TotalMarks = Marks;                
        }
    }
}

エラーは次のとおりです:シーケンスには一致する要素が含まれていません

4

3 に答える 3

1
var temp = lst.Single(l => l.m_SubjectId == SubjectId);

SingleOrDefault1 つまたはまったく結果が必要ない場合は、代わりに使用してください (またはFirstOrDefault十分なはずです)。

Single

if (temp != null)... else

Exception結果がない場合、このテストにアクセスする前にan が発生するため、意味がありません。

ところで、lstメソッドのパラメーター、または別のメソッドへの呼び出しの戻り値である必要があります。

そのまま :

List<Subject> lst = new List<Subject>();
var temp = lst.Single(l => l.m_SubjectId == SubjectId);

内部には何も取得されません (メソッドの呼び出しごとに空のリストを作成します)。

于 2013-09-09T07:28:31.477 に答える
1

List<Subject>メソッドが呼び出されるたびに新しいものを作成しています。正しくないと思います。

SingleOrDefaultまた、代わりに使用Singleして、例外がスローされないようにする必要があります。

于 2013-09-09T07:32:18.920 に答える