Về cơ bản tôi đã điều sau đây:chế Generic - Tôi không chắc chắn làm thế nào để sửa chữa tình trạng này với một hoặc/hoặc trường hợp
public static bool IsBetween<T>(this T value, T a, T b)
where T : IComparable
{
...
}
public static bool IsBetween<T>(this T value, T a, T b)
where T : IComparable<T>
{
...
}
Vấn đề là tôi không thể làm điều này bởi vì bạn không thể có một thành viên có cùng chữ ký, ngay cả khi các ràng buộc khác nhau. Tuy nhiên, không có cách nào để nói rằng ràng buộc là IComparable
HOẶC IComparable<T>
. Vì vậy, tôi không chắc chắn phải làm gì ở đây ngoài việc chọn một và đi với nó. Và, cho dù tôi chọn cái nào, tôi sẽ mất đi cái kia vì chúng tách biệt và không thừa hưởng lẫn nhau (điều này có ý nghĩa).
Tôi có thiếu thứ gì đó ở đây trong đó có cách nào để thực hiện bằng cả hai hoặc tôi có phải chọn một (có lẽ là phiên bản chung) không?
Tôi chưa từng nghĩ về nó như thế. Tôi đoán đó là vì tôi bắt đầu với phiên bản chung, sau đó sao chép/dán nó và cố gắng thực hiện một thay đổi nhanh chóng. –
Ngoài ra, điều này có phải là mặc định để chọn tùy chọn 'IComparable' trước tiên và tùy chọn 'IComparable' thứ hai? –
@ m-y: Độ phân giải quá tải sẽ chọn phương thức * cụ thể hơn *. Nếu không có cách nào để xác định cái nào cụ thể hơn thì bạn sẽ gặp lỗi mơ hồ. –