Tôi đã tự hỏi liệu điều đó có khả thi không, vì 5 phút thử nghiệm của tôi tỏ ra không có kết quả.Chức năng nhận diện chung để sử dụng với suy luận kiểu
Tôi hy vọng nó sẽ được dễ dàng như:
T Identity<T>(T t) { return t; }
Nhưng điều này không biên dịch về phương pháp chung lấy thông số Func. Ví dụ: OrderBy. Thậm chí chỉ định các tham số kiểu (chính xác là những gì tôi muốn tránh!), Nó không biên dịch được.
Tiếp theo, tôi đã cố gắng một cái gì đó tôi nghĩ sẽ làm việc:
Func<T, R> MakeIdentity<T, R>()
{
return (T t) => (R)(object)t;
}
Cũng không đi :((điều này biên dịch khi áp dụng các tham số kiểu, một lần nữa, không phải những gì tôi muốn)
Có ai có may mắn làm như vậy một điều
UPDATE:? xin vui lòng không nói: x => x, tôi biết rằng, nó rõ ràng tôi đang yêu cầu cho một chức năng, không phải là một biểu hiện :)
UPDATE 2: Khi tôi ref er để nhận dạng, tôi có nghĩa là trong ý nghĩa chức năng, nơi mà hàm chỉ đơn giản trả về cùng một đối tượng mà bạn đã truyền cho nó. Nó có lẽ là trong mọi ngôn ngữ chức năng mà tôi đã gặp, nhưng những thứ đó không sử dụng kiểu gõ tĩnh. Tôi tự hỏi làm thế nào để làm điều này (nếu có thể) với Generics. Chỉ để cho vui thôi!
UPDATE 3: Dưới đây là một phần 'giải pháp' dựa trên ý tưởng 2:
Expression<Func<T, T>> MakeIdentity<T>()
{
return t => t;
}
void Foo(string[] args)
{
var qargs = args.AsQueryable();
var q = qargs.OrderBy(MakeIdentity<string>());
...
}
Tôi không nghĩ rằng bất cứ điều gì hơn điều này sẽ thực hiện được.
Bạn đang cố gắng làm gì? –
Cảm thấy mệt mỏi khi viết x => x :) Và thật sự tự hỏi. nó không phục vụ mục đích gì cả. – leppie
Với C# 6.0 'myList.OrderBy (Identity);' sẽ hoạt động. – Henrik