我有一個對象模型MyObject,它包含一個可爲空的字節作爲其屬性之一。 如何對此關鍵字上的MyObjects列表進行排序,以便根據此屬性的值以升序對列表進行排序,最後出現null的對象。使用LINQ排序具有空屬性的對象的列表
感謝您的建議。
我有一個對象模型MyObject,它包含一個可爲空的字節作爲其屬性之一。 如何對此關鍵字上的MyObjects列表進行排序,以便根據此屬性的值以升序對列表進行排序,最後出現null的對象。使用LINQ排序具有空屬性的對象的列表
感謝您的建議。
Linqs OrderBy
帶有過載,接受IComparer
。通過這種方式,您可以將所有對象按您想要的方式排序。
簡單的例子:
public class NullByteComparer : IComparer<byte?>
{
public int Compare(byte? a, byte? b)
{
if (a == b)
return 0;
if (a == null)
return 1;
if (b == null)
return -1;
return return a < b ? -1 : 1;
}
}
使用它
yourObjects.OrderBy(x => x.NullByteProperty, new NullByteComparer());
創建IComparer<byte?>
接口的自定義實現。
使用??
運營商強制null
值後,像這樣:
var res = myList.OrderBy(v => (uint?)v.NullableByteProp ?? uint.MaxValue);
你需要轉換爲uint?
,否則你的空值將會排序r與你的0xFFs。
這將創建一個序列,255和空值的值將散佈在最後。 – phoog 2012-01-10 20:37:27
@phoog是的,我也注意到了,並且很快添加了一個修復:) – dasblinkenlight 2012-01-10 20:38:52
可以使用GetValueOrDefault()函數來提供一個值時,空等於Byte.MaxValue
var orderedValues = values.OrderBy(v => v.GetValueOrDefault(Byte.MaxValue));
默認情況下,nullables地方比較器'null'第一(小於一切),所以你會需要定製'IComparer'。 –
2012-01-10 20:37:07
可能的重複[C# - IComparer - 如果日期時間爲空,那麼應該排序到底部而不是頂部](http://stackoverflow.com/questions/4734055/c-sharp-icomparer-if-datetime-is-null - 然後應該被分類到底部 - 否) – 2012-01-10 20:37:29