我是lambda表达的新手,只是遇到了一些我不理解的东西.
我有一个像这样的对象:
class MyListItem
{
string date; //date in the format "2010-12-05"
int Hour; //hour of day as an int
}
Run Code Online (Sandbox Code Playgroud)
我有一个这些对象的列表,代表一些日期和时间.
我想按日期和小时对此列表进行排序,所以我试试这个:
List<MyListItem> myList = new List<MyListItem>();
myList = getsomedata(); //populate list
myList.Sort((a, b) => (a.date + a.Hour.ToString()).CompareTo(b.date + b.Hour.ToString()));
Run Code Online (Sandbox Code Playgroud)
这是有效的.问题是小时是一个int,所以它有时不是2位数,导致这样的类型:
2010-12-05 1
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 2
2010-12-05 21
2010-12-05 22
Run Code Online (Sandbox Code Playgroud)
我希望它像:
2010-12-05 1
2010-12-05 2
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 21
2010-12-05 22
Run Code Online (Sandbox Code Playgroud)
所以我尝试格式化字符串以在我在lambda中解析之前添加零:
ret.Sort((a, b) => (a.date + a.Hour.ToString("00")).CompareTo(b.date + b.Hour.ToString("00")));
Run Code Online (Sandbox Code Playgroud)
但它不会编译.它告诉我:
Cannot convert lambda expression to type 'Systems.Collections.Generic.IComparer<MyListItem>' because it is not a delegate type.
Run Code Online (Sandbox Code Playgroud)
咦?在这种情况下,普通.ToString()(没有格式字符串)和.ToString("00")之间有什么不同?
另外,有关如何使这项工作的任何建议?
我不是在PC上,所以我无法解释第一个,但我会回避它:
ret.Sort((a,b) => {
int result = string.Compare(a.date,b.date);
if(result==0) result = a.hour.CompareTo(b.hour);
return result;
});
Run Code Online (Sandbox Code Playgroud)
减少字符串创建,不解析开销等;)
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |