从Datatable和列名导入数据可能有多个名称值,例如。该列可能被称为“名称”,或者可以称为“名字”或“F名称”
是否有更有效的方法,然后做很多If else's来分配列的值
目前我所拥有的是
foreach (DataRow item in datatable.Rows)
{
var csvEmployee = new CsvEmployee();
if(datatable.Columns.Contains("Name"))
csvEmployee.FirstName = item["Name"].ToString();
else if (datatable.Columns.Contains("First Name"))
csvEmployee.FirstName = item["First Name"].ToString();
else if (datatable.Columns.Contains("F Name"))
csvEmployee.FirstName = item["F Name"].ToString();
}
答案 0 :(得分:2)
在FOR语句之前检查您的列被调用的内容(通过Columns.Contains),将其分配给变量并在循环中使用它。顺便说一句:尽量不要使用ToString方法。
string columnName = null;
if (datatable.Columns.Contains("Name"))
columnName = "Name";
else if (datatable.Columns.Contains("First Name"))
columnName = "First Name";
else if (datatable.Columns.Contains("F Name"))
columnName = "F Name";
if (columnName == null)
return;
foreach (DataRow item in datatable.Rows)
{
var csvEmployee = new CsvEmployee();
csvEmployee.FirstName = item[columnName].ToString();
}
答案 1 :(得分:1)
string[] firstnames = new String[] { "Name", "First Name", "F Name" } //Add more if u want
foreach (string x in firstnames)
{
if (datatable.Columns.Contains(x)) csvEmployee.FirstName = item[x];
}
答案 2 :(得分:1)
您可以使用三元运算符替换if
/ else if
,但可读性不是最好的。
在循环之前执行此操作:
var columns = datatable.Columns;
var columnName = columns.Contains("Name") ? "Name"
: columns.Contains("First Name") ? "First Name"
: columns.Contains("F Name") ? "F Name" : null;
if (columnName == null) return; // assuming the containing method returns void
然后在循环中,只需执行:
csvEmployee.FirstName = item[columnName].ToString();
如果包含方法没有返回void
,则不按照上面的建议执行if (columnName == null) return;
,而是可以执行只执行循环的null
检查当columnName
不是null
时。