我正在學習一點LINQ排序,因爲我有一個ID列表,我需要按順序排列它們。但是,某些ID需要優先於標準排序。C#LINQ Orderby - 真/假如何影響orderby?
鑑於此C#代碼(可以粘貼到.NET Fiddle測試)的排序工作,因爲我需要它,但我不明白,爲什麼在一個沒有(!
)運算符包含是給我正確的順序?
我的預期訂購輸出是(5, 1, 2, 3, 4, 6, 7, 8, 9
)。
如果我在我的排序中有一個Contains
,它不應該給予返回true的行的優先順序嗎?相反,它會給返回false的行賦予排序優先級。
using System.Linq;
using System;
public class Program
{
public static void Main()
{
var numbersToFilterBy = new [] {5, 11, 20};
var x = new [] {new XClass(){Id = 1}, new XClass(){Id = 9}, new XClass(){Id = 5}, new XClass(){Id = 3}, new XClass(){Id = 4}, new XClass(){Id = 2}, new XClass(){Id = 6}, new XClass(){Id = 8}, new XClass(){Id = 7}};
var trueData = (from data in x
orderby !numbersToFilterBy.Contains(data.Id), data.Id
select data).ToList();
foreach(var item in trueData){
Console.WriteLine(item.Id);
}
}
public class XClass{
public int Id{get;set;}
}
}
這是怎麼回事?
在c#中,布爾值不具有數字表示形式。他們不是幕後的數字,我們假裝是布爾人,他們只是布爾人。有人說過,邏輯可能會幫助人們記住排序是如何工作的(也可能是爲什麼.net的設計就是這種方式),但值得記住的是,在.net中沒有bool的數字表示形式。 – Chris
@Chris但如果將布爾值轉換爲整數,則會出現數字結果。這比其他一些語言還要多。 –
行'int test =(int)true;'拋出'Can not convert type'bool'to'int''的編譯器異常。你怎麼沒有錯誤投射? – Chris