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);

如果您想要一个或没有结果,请改用SingleOrDefault(或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 回答
1

在 Main 方法中声明 List 并将其作为参数传递给 AddSubjectDetails 函数

public void AddSubjectDeatils(string SubjectId, double Marks, double NegativeMark,List<Subject> listofsubjects)
    {

        var temp = listofsubjects.SingleorDefault(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;
        }
    }
于 2013-09-09T07:48:16.297 回答