2016-10-16 36 views
5

Tôi không thể thay đổi biến "giá trị" này từ người dân địa phương hoặc cửa sổ ngay lập tức. Có gì không ổn? T không phải là int trong thời gian chạy? Whats wrong?Thay đổi loại T int trong cửa sổ cục bộ

http://im2.ezgif.com/tmp/ezgif-3735159626.gif

tôi không thể thay đổi _value too.I nghĩ rằng đây là một lỗi hoặc một cái gì đó?

class Program 
    { 
     static void Main(string[] args) 
     { 
      Just<int> just = new Just<int>(); 
      just.Try(5); 
     } 
    } 
    class Just<T> 
    { 
     private T _value; 
     public void Try(T value) 
     { 
      this._value = value; 
     } 
    } 

Bên cạnh sử dụng này, cố gắng sử dụng thể hiện của Just, làm việc tốt

enter image description here

+0

Hoạt động tốt cho tôi (VS 2013). Phiên bản nào bạn đang sử dụng? – Rob

+0

Cộng đồng VS 2015 (14.0.25425.01 Cập nhật 3) – Cevizli

+0

Tôi đã có thể tạo lại lỗi này trong chuyên gia VS 2015. –

Trả lời

2

Đây là lỗi đã biết trong bộ đánh giá biểu thức. Có vấn đề về GitHub theo dõi lỗi này here

0

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.

Các vấn đề liên quan