每个项目都有一个水平三个字符串的下拉列表。如何按字母顺序按字母顺序从每个项目中按字符串1排序,然后按每个项目的字符串2排序?
这是我的片段:
foreach (var item in list)
{
if(typeof(T).Equals(typeof(Machine)))
{
Machine machine = (item as Machine);
string title = machine.MachineName + " - " + machine.Serial + " - " + machine.MachineOwnership;
alert.AddAction(UIAlertAction.Create(title, UIAlertActionStyle.Default, action => {
button.SetTitle(title, UIControlState.Normal);
}));
}
else if(typeof(T).Equals(typeof(Person)))
{
alert.AddAction(UIAlertAction.Create((item as Person).Name, UIAlertActionStyle.Default, action => {
button.SetTitle((item as Person).Name, UIControlState.Normal);
}));
}
}
list
包含Machine
类型具有以下属性的对象:
MachineName
,Serial
和MachineOwnshership
(所有字符串)。
因此,当我首先检查列表类型是什么,然后填写每个项目的下拉列表时,我想做OrderBy(MachineName).ThenBy(Serial)
但不确定如何正确执行此操作。
如果有人需要澄清,我的下拉列表看起来像这样:
-------------------------------------------------
MachineNameStartsWithA - 01234 - OwnerStartsWithA
--------------------------------------------------
MachineNameStartsWithB - 012345 - OwnerStartsWithB
---------------------------------------------------
等......它是一长串的项目,其中字符串被" - "喜欢它在代码中的显示。
另外,对于它的价值,这是目前在Xamarin应用程序中。
答案 0 :(得分:4)
我认为这样的事情应该有效。按Tuple
排序应该是词典:
list.OfType<Machine>().OrderBy(x => new Tuple<string,string>(x.MachineName,x.Serial))
OfType
调用还应删除typeof
检查和转换的必要性 - 结果应该是Machine
s的可迭代。
根据有关多种对象类型的评论:
将类似的类型组合在一起
除非将Machine
和Person
组合在一起,否则从UI / UX角度来看这将是我的默认首选项。根据{{1}}的长度,最好先拆分元素类型,因为list
每次都会枚举整个列表。
list.OfType
交错各种类型
foreach(var item in list.OfType<Machine>().OrderBy(x => new Tuple<string,string>(x.MachineName,x.Serial)))
{
// append item
}
foreach(var item in list.OfType<Person>().OrderBy(x => x.Name))
{
// append item
}