Lỗi này là "bình thường". Có vẻ như, trình gỡ lỗi không nhận được giá trị mà bạn nhập là T = int
nhưng chỉ đơn giản là int
(được viết trên trình gỡ lỗi mà nó mong đợi là int
) và sau đó cố gắng chuyển đổi int
thành T
của bạn. Ngay cả khi T
thuộc loại int
, nó không thể chuyển đổi hoàn toàn (thường bạn chỉ phải truyền giá trị của mình để giải quyết loại lỗi này), nó có thể biên dịch lại giá trị của bạn khi đang sử dụng cùng một cấu hình được sử dụng để biên dịch mã của bạn . Và trong cấu hình này value
có loại T = unknown
, không phải là T = int
.
Tôi đoán rằng việc thay đổi giá trị sẽ không hoạt động thực sự như thời gian chạy. Bởi vì trong thời gian chạy, T = int
(người đó biết rõ hơn về hành vi của trình biên dịch/debugger hơn tôi, có thể có thể, giải thích cho bạn chi tiết những gì đang xảy ra ở đây.)
Nhưng giống như trong phương pháp này :
public void Try(int value)
{
// With _value as T
_value = value;
}
Bạn sẽ nhận được cùng một thông báo lỗi (và không thể biên dịch được).
Lỗi CS0029 Không thể ngầm chuyển đổi loại 'int' thành 'T'
Nhưng nếu bạn gõ này trong trình gỡ lỗi của bạn như là giá trị (đối với phương pháp của bạn):
(T)(object)10 // Or whatever your int value is
Hoặc đối với phương pháp thử trên (bạn thực sự nên tránh):
_value = (T)(object)value;
Nó hoạt động, giá trị được thay đổi. (Trừ khi giá trị của bạn không thuộc loại T
)
Bạn đã chuyển đổi rõ ràng int
thành T
.
Không có gì sai, đó chỉ là lỗi chuyển đổi chung không chung chung.
Nguồn
2016-10-17 12:35:33
Hoạt động tốt cho tôi (VS 2013). Phiên bản nào bạn đang sử dụng? – Rob
Cộng đồng VS 2015 (14.0.25425.01 Cập nhật 3) – Cevizli
Tôi đã có thể tạo lại lỗi này trong chuyên gia VS 2015. –