Tôi đã nghiên cứu một chút về thứ tự LINQ như tôi có một danh sách các Id, và tôi cần phải đặt hàng tuần tự. Tuy nhiên, có một số id nhất định cần được ưu tiên so với thứ tự tiêu chuẩn.C# LINQ Orderby - Làm cách nào để đúng/sai ảnh hưởng đến orderby?
Với C# mã này (có thể được dán vào .NET Fiddle để thử nghiệm) thứ tự làm việc như tôi cần nó, nhưng tôi không hiểu tại sao một không (!
) điều hành trên chứa được đem lại cho tôi thứ tự có đúng không?
Sản lượng đặt hàng dự kiến của tôi là (5, 1, 2, 3, 4, 6, 7, 8, 9
).
Nếu tôi có Contains
theo thứ tự của mình, không nên đặt ưu tiên đặt hàng cho các hàng trả về đúng? Thay vào đó, nó xuất hiện để ưu tiên thứ tự các hàng trả về 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;}
}
}
Giải thích tại sao điều này xảy ra?
Trong C# booleans không có biểu diễn dạng số. Chúng không phải là những con số đằng sau hậu trường mà chúng ta giả vờ là những phép toán, chúng chỉ là những phép toán. Điều đó đã được nói rằng logic cũng có thể giúp mọi người nhớ cách thứ tự hoạt động (và cũng có thể là lý do tại sao thiết kế của .net là theo cách này) nhưng đáng nhớ rằng không có đại diện số của một bool trong .net. – Chris
@Chris Nhưng có một kết quả dạng số nếu bạn đưa boolean vào một số nguyên. Mà vẫn còn nhiều hơn một số ngôn ngữ khác có. –
Dòng 'int test = (int) true;' ném ngoại lệ trình biên dịch của 'Không thể chuyển đổi kiểu 'bool' thành 'int''. Làm thế nào bạn đúc mà không có một lỗi? – Chris