Tại sao tôi luôn cần chỉ định giá trị cho biến chuỗi, trước khi thực sự sử dụng giá trị đó để so sánh. Đối với ví dụ: Một số đầu vào - objTại sao gán giá trị cho chuỗi trước khi so sánh, khi mặc định là null
string temp;
if (obj== null)
{
temp = "OK";
}
string final = temp;
tôi nhận được biên dịch lỗi thời gian - một cái gì đó giống như - không thể sử dụng biến unassigned 'tạm thời'. Nhưng biến chuỗi có giá trị mặc định là 'null', mà tôi muốn sử dụng. Vậy tại sao điều này lại không được phép?
Btw, ghi chú kỹ thuật nhanh. Bởi vì C# biên dịch thành IL, và phương thức mức IL là dựa trên stack, các biến kỹ thuật không tồn tại trừ khi chúng được gán. Trong khi trình gỡ lỗi có thể cho bạn biết rằng một biến chưa được gán bằng '0' hoặc một cái gì đó, trong hầu hết các trường hợp, đây chỉ là một phép lịch sự. Nó sẽ chỉ được tạo sau này. – GregRos
@GregRoss - và khi nó được tạo, tôi tin rằng nó là 'mặc định (T)', 'null' trong trường hợp này. Nhưng không thể quan sát được lập trình viên C#. –
Không chính xác. Trong IL, một biến không thể được khai báo mà không có một giá trị rõ ràng mà nó có thể được gán. Để gán một biến cho 'default (T)' (hoặc 'null'), trước tiên bạn sẽ cần lấy giá trị này bằng cách sử dụng một lệnh rõ ràng, và chỉ sau đó phân bổ nó. Trong thực tế, IL tạo ra từ C# không bao giờ làm điều này. Trong khi bạn có thể nghĩ rằng bạn đã khai báo một biến, IL thường không khai báo nó cho đến khi nó có giá trị xác định để gán. – GregRos