Có thể loại trừ các loại cụ thể khỏi tập hợp các loại có thể, có thể được sử dụng trong thông số chung không? Nếu vậy thì làm sao.Loại trừ các loại trong các ràng buộc chung (có thể?)
Ví dụ
Foo<T>() : where T != bool
có nghĩa là bất kỳ loại trừ kiểu bool.
Sửa
Tại sao?
Đoạn mã sau là nỗ lực của tôi để thực thi ràng buộc âm.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var x1=Lifted.Lift("A");
var x2=Lifted.Lift(true);
}
static class Lifted
{
// This one is to "exclude" the inferred type variant of the parameter
[Obsolete("The type bool can not be Lifted", true)]
static public object Lift(bool value) { throw new NotSupportedException(); }
// This one is to "exclude" the variant where the Generic type is specified.
[Obsolete("The type bool can not be Lifted", true)]
static public Lifted<T> Lift<T>(bool value) { throw new NotSupportedException(); }
static public Lifted<T> Lift<T>(T value) { return new Lifted<T>(value); }
}
public class Lifted<T>
{
internal readonly T _Value;
public T Value { get { return this._Value; } }
public Lifted(T Value) { _Value = Value; }
}
}
}
Như bạn có thể thấy nó liên quan đến một chút niềm tin vào độ phân giải quá tải là chính xác và bit @jonskeet -quá mã độc ác.
Nhận xét phần có giao dịch với ví dụ về loại phỏng đoán và nó không hoạt động.
Sẽ tốt hơn nhiều nếu bạn có giới hạn chung loại trừ.
Việc sử dụng sẽ là gì? 'trong đó T: x' có nghĩa là' T' có các khả năng 'x'. Một ràng buộc tiêu cực dường như vô nghĩa. –
Tại sao bạn muốn làm điều đó? Bạn đang cố gắng đạt được điều gì? – zmbq
Xem chỉnh sửa được cập nhật trên bài đăng gốc. –