关于How to cast while Sorting?,我尝试了下面的答案之一。
vehicleList.OrderBy(c=>
{
Car car = c as Car;
if (car != null)
return car.ModelName
else
return "";
}
但是它给出了编译错误:
方法的类型参数 “System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func)'无法从用法中推断出来。尝试 明确指定类型参数。
这有什么问题?怎么纠正?
我尝试实现的目标如下:
答案 0 :(得分:6)
这解决了错误:
var sortedVehicles = vehicleList.OrderBy<Vehicle, string>(c=>
{
...
});
答案 1 :(得分:2)
你可以实现这样的比较器:
var sorted = uiItems.OrderBy(x => x.Contact, new YourComparer ());
public class YourComparer : IComparer<Contact>
{
public int Compare(Contact? x, Contact? y)
{
if (x == y)
return 0;
if (x == null)
return 1;
if (y == null)
return -1;
if (x.Presence == null)
return 1;
if (y.Presence == null)
return -1;
return return x.Presence < y.Presence ? -1 : 1;
}
}
答案 2 :(得分:0)
您是否尝试过引用的问题中的建议,使用Linq Cast
?
var sorted = uiItems.Cast<Contact>()
.OrderBy(c => contact.Presence; );
答案 3 :(得分:0)
请看以下示例:
class Item
{
public int X;
public string Y;
}
var items = new Item[100];
var ordered = items.OrderBy<Item, string>(i => i.Y);
OrderBy
需要两种类型。前者是可枚举的,后者用于lambda表达式。另外在某些情况下,必须使用正在使用的集合元素。如果您确定所有类型都属于特定类型或Cast
,则可以在OrderBy
之前使用OfType
方法,以便省略其他类型。