我创建了一个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;
}
}
}
错误是:序列不包含匹配元素
答案 0 :(得分:1)
var temp = lst.Single(l => l.m_SubjectId == SubjectId);
使用SingleOrDefault
代替(或FirstOrDefault
应该足够),如果您想要一个或没有结果。
使用Single
,
if (temp != null)... else
没有意义,因为如果没有结果,在访问此测试之前会引发Exception
。
顺便说一句,lst
应该是您方法的参数,或者是对另一个方法的调用的返回值。
原样:
List<Subject> lst = new List<Subject>();
var temp = lst.Single(l => l.m_SubjectId == SubjectId);
你永远不会得到任何东西(你在每次调用方法时创建一个空列表)
答案 1 :(得分:1)
每次调用该方法时,您都会创建新的List<Subject>
。我认为这不正确。
您还应该使用SingleOrDefault
代替Single
来防止它抛出异常。
答案 2 :(得分: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;
}
}