2011-07-28 72 views
54

Một boolean (bool) không được rỗng. Và:Giá trị boolean mặc định trong C# là gì?

bool foo; if(foo){} // Use of unassigned local variable 'foo' 

Tại sao giá trị mặc định không sai? Vì vậy, giá trị nếu nó không phải là null là gì? Lý do là gì?

Chỉnh sửa 1 - Giá trị mặc định thực sự là sai - nhưng tất cả biến phải được khởi tạo, tại sao? đây là một câu hỏi khác;)

Chỉnh sửa 2 - với Resharper: private bool foo = false; // Initializing field by default value is redundant ???

+1

Bạn có thể thấy http://blogs.msdn.com/b/ericlippert/archive/2009/10/12/absence-of-evidence-is-not-evidence-of-absence.aspx thú – AakashM

Trả lời

59

http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

Nên nhớ rằng việc sử dụng các biến chưa được khởi tạo trong C# không được phép.

Với

bool foo = new bool(); 

foo sẽ có giá trị mặc định.

Boolean mặc định là sai

+0

OK . Làm thế nào bạn có thể giải thích các lỗi biên dịch? – JohnJohnGa

+1

Xin lỗi, đã thêm: Hãy nhớ rằng việc sử dụng các biến chưa được khởi tạo trong C# không được phép. Như đã thấy trong bài viết được liên kết – Destructor

+1

Cảm ơn! và vì vậy làm thế nào bạn có thể giải thích "Chỉnh sửa 2" của tôi :) – JohnJohnGa

4

Giá trị mặc định cho bool là false. Xem this table để có tham chiếu tuyệt vời về các giá trị mặc định. Lý do duy nhất nó sẽ không sai khi bạn kiểm tra nó là nếu bạn khởi tạo/đặt nó thành true.

9

Giá trị mặc định thực sự là sai.

Tuy nhiên, bạn không thể sử dụng biến cục bộ vì nó chưa được gán trước.

Bạn có thể sử dụng từ khoá mặc định để xác minh:

bool foo = default(bool); 
if (!foo) { Console.WriteLine("Default is false"); } 
0

Hãy thử này (sử dụng từ khóa mặc định)

bool foo = default(bool); if (foo) { } 
0

Nó có thể được coi là cách tiếp cận chương trình phòng thủ từ trình biên dịch - các biến phải được gán trước khi nó có thể được sử dụng.

17

Các biến cục bộ cơ bản không được tự động khởi tạo. Do đó việc sử dụng chúng mà không khởi tạo sẽ dẫn đến một ngoại lệ.

Chỉ các biến sau sẽ tự động khởi tạo các giá trị mặc định của họ:

  • biến tĩnh
  • biến Instance của lớp và trường hợp struct
  • yếu tố Mảng

Giá trị mặc định giá trị như sau (được gán trong hàm tạo mặc định của một lớp):

  • Giá trị mặc định của một biến loại tham chiếu là null.
  • Đối với các loại nguyên, giá trị mặc định là 0
  • Đối với char, giá trị mặc định là `\ u0000'
  • Đối với phao, giá trị mặc định là 0.0f
  • Ví đôi, giá trị mặc định là 0.0d
  • Đối với số thập phân, giá trị mặc định là 0.0 Tr
  • Đối bool, giá trị mặc định là false
  • Đối với một kiểu enum, giá trị mặc định là 0
  • Đối với một cấu trúc kiểu, giá trị mặc định là thu được bằng se fitting mọi lĩnh vực kiểu giá trị với các giá trị mặc định của họ

Theo như phần sau của câu hỏi của bạn được conerned:

  • Lý do tại sao tất cả các biến mà không tự động khởi tạo các giá trị mặc định nên được khởi tạo là một hạn chế áp đặt bởi trình biên dịch.
  • riêng bool foo = false; Điều này thực sự dư thừa vì đây là một biến cá thể của một lớp. Do đó điều này sẽ được khởi tạo thành false trong constructor mặc định. Do đó không cần phải thiết lập này để sai chính mình.
+4

Để hoàn thành, [bảng giá trị mặc định tại MSDN] (http://msdn.microsoft.com/en-us/library/vstudio/83fhsxwc.aspx) nói rằng các giá trị mặc định cho struct các loại cũng bao gồm cài đặt "tất cả các trường kiểu tham chiếu thành null". –

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