这是我的代码,应该将对象值添加到列表中。
public List<tempTable> GetAttendanceLeaveReportForChart(double totalWorkingdays, double attendanceDays, double leaveData, double absentData)
{
List<tempTable> temp = new List<tempTable>();
for (int ct = 0; ct < 4; ct++)
{
if (ct == 0)
{
tempTable tempTableForAttendAndLeaveReport = new tempTable();
tempTableForAttendAndLeaveReport.FieldName = "Total working days";
tempTableForAttendAndLeaveReport.FieldValue = Convert.ToDouble(totalWorkingdays);
temp.Add(tempTableForAttendAndLeaveReport);
}
else if (ct == 1)
{
tempTable tempTableForAttendAndLeaveReport = new tempTable();
tempTableForAttendAndLeaveReport.FieldName = "Attendance";
tempTableForAttendAndLeaveReport.FieldValue = Convert.ToDouble(attendanceDays);
temp.Add(tempTableForAttendAndLeaveReport);
}
else if (ct == 2)
{
tempTable tempTableForAttendAndLeaveReport = new tempTable();
tempTableForAttendAndLeaveReport.FieldName = "Leave";
tempTableForAttendAndLeaveReport.FieldValue = Convert.ToDouble(leaveData);
temp.Add(tempTableForAttendAndLeaveReport);
}
else if (ct == 3)
{
tempTable tempTableForAttendAndLeaveReport = new tempTable();
tempTableForAttendAndLeaveReport.FieldName = "Absent";
tempTableForAttendAndLeaveReport.FieldValue = Convert.ToDouble(absentData);
temp.Add(tempTableForAttendAndLeaveReport);
}
}
return temp;
}
在这里,我创建了一个存储价值的类名tempTable
。从tempTableForAttendandLeaveReport
收到的值将收到值并存储在列表中。问题是第一次循环迭代,tempTable
中的值是:
FieldName = "Total Working days"
和fieldValue
来自参数接收的变量。但是当循环迭代第二次时,在第一个循环中接收的值将被覆盖在列表中。在第二次迭代中,列表索引0和1处的值是添加到列表的最新值。
我不知道这是怎么发生的......
任何帮助。提前致谢
答案 0 :(得分:2)
从查看当前代码,您不需要循环,您永远不会使用ct
的值,并且您不需要if
- 语句。要获得相同的结果,这是您需要的唯一代码:
public List<tempTable> GetAttendanceLeaveReportForChart(double totalWorkingdays, double attendanceDays, double leaveData, double absentData)
{
List<tempTable> temp = new List<tempTable>();
temp.add(new tempTable("Total working days", Convert.ToDouble(totalWorkingdays));
//and etc for other 3 values
return temp;
}
假设你在tempTable中有一个构造函数来设置这两个值。
<强>解决方案强>
问题是tempTable的字段值是static
所以总是保留分配给它们的最后一个值。这些字段不应该是静态的。
答案 1 :(得分:1)
尝试使用不同的名称创建TempTable的新变量,或者只使用重新实例化的对象。在这里,您不需要if条件,因为ct
中没有提到for-loop
:
为了更好的可读性,请不要使用冗长的变量:
public List<tempTable> GetAttendanceLeaveReportForChart(double totalWorkingdays, double attendanceDays, double leaveData, double absentData)
{
List<tempTable> temp = new List<tempTable>();
tempTable obj = new tempTable();
obj.FieldName = "Total working days";
obj.FieldValue = Convert.ToDouble(totalWorkingdays);
temp.Add(obj);
obj = new tempTable();
obj.FieldName = "Attendance";
obj.FieldValue = Convert.ToDouble(attendanceDays);
temp.Add(obj);
obj = new tempTable();
obj.FieldName = "Leave";
obj.FieldValue = Convert.ToDouble(leaveData);
temp.Add(obj);
obj = new tempTable();
obj.FieldName = "Absent";
obj.FieldValue = Convert.ToDouble(absentData);
temp.Add(obj);
return temp;
}
<强>更新强>:
public class tempTable
{
private string _FieldName; //don't use static
private double _FieldValue; //don't use static
public string FieldName { get { return _FieldName; } set { _FieldName = value; } }
public double FieldValue { get { return _FieldValue; } set { _FieldValue = value;} }
}
答案 2 :(得分:1)
更改变量名称然后它将起作用。