我很难编写一些我确信可以做得更聪明的东西 - 有趣的小问题 - 使用c#6.0
我怎样才能减少这种情况 - 再过20行。
string fullLine = newLine.col1_index_no +
newLine.col2_depot_custRef +
newLine.col3_depot_no +
newLine.col4_driver_id +
newLine.col5_vehicle_id +
newLine.col6_trans_type;
如果有帮助的话就是这个班级:
class lineBuilder
{
public string col1_index_no { get; set; }
public string col2_depot_custRef { get; set; }
public string col3_depot_no { get; set; }
public string col4_driver_id { get; set; }
public string col5_vehicle_id { get; set; }
public string col6_trans_type { get; set; }
public string col7_sign_id { get; set; }
public string col8_note_id { get; set; }
public string col9_route_code { get; set; }
public string col10_RA_no { get; set; }
public string col11_doc_type { get; set; }
public string col12_user_gen_flag { get; set; }
public string col13_seq_no { get; set; }
public string col14_pallet_id { get; set; }
public string col15_tote_id { get; set; }
public string col16_adj_type { get; set; }
public string col17_rtn_sig_not_avlb { get; set; }
public string col18_scan_dateTime { get; set; }
public string col19_scan_in_time { get; set; }
public string col20_AX_status { get; set; }
}
答案 0 :(得分:1)
你可以通过反思来做到这一点。此示例代码将按字母顺序打印出所有属性:
var lb = new lineBuilder
{
col1_index_no = "item one",
col2_depot_custRef = "item depot custRef"
col10_RA_no = "further values will not make this explanation any clearer"
};
StringBuilder sb = new StringBuilder();
IEnumerable<PropertyInfo> properties = typeof(lineBuilder)
.GetProperties()
.Where(p => p.PropertyType.Equals(typeof(string)))
.OrderBy(p => p.Name);
foreach(PropertyInfo propertyInfo in properties)
{
var value = (string)propertyInfo.GetValue(lb);
sb.AppendLine(string.Format("{0}: {1}", propertyInfo.Name, value ?? String.Empty));
}
Console.WriteLine(sb.ToString());
但是,您不希望它们按字母顺序排列,您希望它们按数字顺序排列。
您需要一个不同的OrderBy
子句。
如果您的所有属性名称都遵循格式col{number}
,则可以使用正则表达式从每个名称中提取数字,并使用它来执行排序。
Regex regex = new Regex(@"^col(\d+)");
IEnumerable<PropertyInfo> properties = typeof(lineBuilder)
.GetProperties()
.Where(p => p.PropertyType.Equals(typeof(string)))
.OrderBy(p => int.Parse(regex.Match(p.Name).Groups[1].Value));