[英]Sort dynamic dropdown list alphabetically
我有一个下拉列表,每个项目的水平三个字符串。 我怎样才能按字母顺序首先从每个项目的字符串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应用程序内部。
我认为这样的事情应该起作用。 按Tuple
排序应按字典顺序:
list.OfType<Machine>().OrderBy(x => new Tuple<string,string>(x.MachineName,x.Serial))
OfType
调用还应该消除对typeof
检查和typeof
的需要-结果应该是Machine
的可迭代项。
关于多种对象类型的注释:
将类似类型分组在一起
从UI / UX角度来看,这将是我的默认首选项,除非将Machine
和Person
混合在一起确实很有意义。 根据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
}
交织各种类型
private Tuple<string,string> Projection(BaseClass x)
{
Machine item = x as Machine;
if(item != null)
{
return new Tuple<string,string>(item.MachineName,item.Serial);
}
Person item = x as Person;
if(item != null)
{
return new Tuple<string,string>(item.Name,"");
}
}
foreach(var item in list.OrderBy(Projection))
{
// check type of item and append as appropriate
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.