我现在拥有以下内容:
switch (Mysort)
{
case "reqDate":
lstDMV.Sort((x, y) => DateTime.Compare(x.RequestDate, y.RequestDate));
break;
case "notifDate":
lstDMV.Sort((x, y) => DateTime.Compare(x.NotifDate, y.NotifDate));
break;
case "dueDate":
lstDMV.Sort((x, y) => String.Compare(x.TargetDateShort, y.TargetDateShort));
break;
case "days":
lstDMV.Sort((x, y) => x.DaysLapsed.CompareTo(y.DaysLapsed));
break;
}
我希望摆脱case语句,只需要做如下操作:
lstDMV.Sort((x, y) => String.Compare(x.MySort, y.MySort));
该case语句很庞大,会降低可读性。但因为MySort
不包含在lstDMV
中,所以它无法工作。是否有其他方法可以替代它?
当然,我会更改文本,确保MySort
变量值与lstDMV
属性名称完全匹配。
我也尝试了以下方法,但没有成功 :(
if (sort != "")
{
string xsort, ysort;
xsort = "x." + sort;
ysort = "y." + sort;
lstDMV.Sort((x, y) => String.Compare(xsort, ysort));
}
List<T>.Sort
不是LINQ方法。 - Jon SkeetFunc<A, A, int>
(其中A
是您的x
和y
的类型)。这将删除切换,但这意味着您必须在某个地方填充字典,这可能同样冗长。 - O. R. Mapperswitch
语句。您甚至可以使用不同的比较方法。也许您应该实现一些IComparer<T>
类。 - Nico Schertler