2015-12-18 14 views
6

Với mã này:Lý do cho lỗi "Sử dụng biến cục bộ chưa được gán" là gì?

bool dataToAdd; 
if (null == _priceComplianceDetailList) return dataToAdd; 

Tôi đã nhận được một lỗi biên dịch, "Sử dụng biến cục bộ unassigned 'dataToAdd'"

Vì vậy, tôi đã phải gán một cách rõ ràng "false" vào bool:

bool dataToAdd = false; 
if (null == _priceComplianceDetailList) return dataToAdd; 

Trong bối cảnh:

private bool PopulateSheetWithDetailData() 
{ 
    bool dataToAdd = false; 
    if (null == _priceComplianceDetailList) return dataToAdd; 
    List<PriceComplianceDetail> _sortedDetailList = 
    . . . 
    return _sortedDetailList.Count > 0; 
} 

Tại sao cần thiết? Đừng bools có một giá trị mặc định của sai?

+4

Giá trị mặc định chỉ áp dụng cho thành viên của lớp, biến cục bộ trong phương thức phải được chỉ định rõ ràng. – Lee

+1

Ngoài ra, bạn có thể xóa hoàn toàn biến vì bạn đang quay trở lại dựa trên số lượng danh sách và trong danh sách đầu tiên nếu bạn có thể trả về trực tiếp sai. –

Trả lời

11

Do biến cục bộ không được khởi tạo theo mặc định. Bạn nên khởi tạo chúng một cách rõ ràng. Nó là một tính năng trình biên dịch để tránh những sai lầm trong tương lai. Nó được làm rõ trong đặc điểm kỹ thuật ngôn ngữ herehere.

Lý do đây là bất hợp pháp trong C# là bởi vì sử dụng một unassigned địa phương có khả năng cao là một lỗi

Nếu bạn muốn biết lý do cho quyết định này thấy here.

+1

Cũng có liên quan là [phần 5.1.7] (https://msdn.microsoft.com/en-us/library/aa691170 (v = vs.71) .aspx). Cụ thể: "Một biến cục bộ được giới thiệu bởi _local-variable-declaration_ không được tự động khởi tạo và do đó không có giá trị mặc định." –

+0

Đã thêm vào câu trả lời, Cảm ơn @JoeFarrell, – dotctor

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