我有一个编码问题,认为反射可能是满足 C# VS-2022 源代码情况的方法。
我的问题是,读完下面的内容后......可以使用反射来简化field-name
用于排序列表的硬编码吗?
我有这句话,其中的r.TXT_DISPL_VEHICLE
代码显然是输入到源代码中的。
case 1:
// For the first sort-box, ALWAYS sort by the 'DTTM_TRIP_START_DATE'.
_ListForGrid = _ListForGrid.AsQueryable().OrderBy(r => r.DTTM_TRIP_START_DATE)
.ThenByDescending(r => r.TXT_DISPL_VEHICLE).ToList();
但是,这个字段名TXT_DISPL_VEHICLE
取决于排序语句所用的类名。我们有许多项目调用此函数,例如:
class-name field-name
---------------- --------------------
"Vehicle" , "TXT_DISPL_VEHICLE"
"Department" , "TXT_DEPT_ABBREV"
"Driver" , "TXT_DISPL_DRIVER_NAME"
"Manager" , "TXT_DISPL_DRIVER_NAME"
我想知道反射是否可以解决避免一系列 switch 语句的编码问题,例如:
switch (itemType) {
case "Vehicle":
//use the value TXT_DISPL_VEHICLE in the code for vehicle.
break;
...并且每个项目都类似。
此外,“排序”句子变得更加复杂,并且基于OrderBy
从句中使用了多少个项目......例如第三种排序......
case 3:
// For the first sort-box, ALWAYS sort by the 'DTTM_TRIP_START_DATE'.
if (saOrderBys[0] == "DESC") {
int soValue13 = Convert.ToInt32(ddlOrderByFieldNamesList.FirstOrDefault(r => r.Key == iaSortDDLs[0]).Value);
_ListForGrid = _ListForGrid.AsQueryable().OrderByDescending(r => r.DTTM_TRIP_START_DATE)
.ThenBy(r => r.TXT_DISPL_VEHICLE)
.ThenBy(r => r.TXT_DISPL_DRIVER_NAME).ToList();
} else if (iDESC == 2) {
_ListForGrid = _ListForGrid.AsQueryable().OrderBy(r => r.DTTM_TRIP_START_DATE)
.ThenByDescending(r => r.TXT_DISPL_VEHICLE)
.ThenBy(r => r.TXT_DISPL_DRIVER_NAME).ToList();
} else if (iDESC == 3) {
_ListForGrid = _ListForGrid.AsQueryable().OrderBy(r => r.DTTM_TRIP_START_DATE)
.ThenBy(r => r.DTTM_TRIP_START_DATE)
.ThenByDescending(r => r.TXT_DISPL_DRIVER_NAME).ToList();
}
return;
我建议使用新的
switch
表达式,它将简化语法: