2009-01-11 16 views
11

Có thể có một công tắc trong C# để kiểm tra xem giá trị rỗng hoặc rỗng không "" nhưng String.Empty? Tôi biết tôi có thể làm điều này:C# Đổi bằng String.IsNullOrEmpty

switch (text) 
{ 
    case null: 
    case "": 
     break; 
} 

Có điều gì tốt hơn, vì tôi không muốn có danh sách lớn các câu lệnh IF không?

I'mm cố gắng thay thế:

if (String.IsNullOrEmpty(text)) 
    blah; 
else if (text = "hi") 
    blah 
+0

Tôi không biết đã có một sự khác biệt giữa String.Empty và "". Có gì khác biệt? – recursive

+0

Không có. Nó giống nhau ở cấp độ nội dung. Tham chiếu là khác nhau. String.Empty trả về luôn cùng một cá thể trong khi "" trả về một cá thể khác. –

+2

Tôi chắc chắn hai "" thực sự sẽ là cùng một đối tượng kể từ khi .net thực hiện các chuỗi, nhưng không phải là số dương. object.ReferenceEquals cho biết chúng giống nhau. – JoshBerke

Trả lời

28

tôi sẽ đề nghị một cái gì đó như sau:

switch(text ?? String.Empty) 
{ 
    case "": 
     break; 
    case "hi": 
     break; 
} 

Là những gì bạn đang tìm kiếm?

5

thế nào về

if (string.isNullOrEmpty(text)) 
{ 
    //blah 
} 
else 
{ 
switch (text) 
{ 
    case "hi": 
} 

}

+0

Câu hỏi đặt ra là tránh các câu lệnh if-else. –

+1

Nếu bạn nhìn vào lịch sử chỉnh sửa, câu hỏi ban đầu không bao gồm bất cứ điều gì về nếu khác ;-) – JoshBerke

+0

Ngoài ra điều này tránh phong cách nếu mệnh đề anh ta lo lắng về chỉ có một đơn nếu khác trái ngược với nếu elseif elseif vv – JoshBerke

3

Từ documentation của String.Empty:

Giá trị của trường này là chuỗi zero-length "".

Tôi hiểu điều này có nghĩa là không có sự khác biệt giữa ""String.Empty. Tại sao bạn đang cố phân biệt chúng?

+0

Tôi không chắc chắn rằng có sự khác biệt giữa "" và String.Empty đối với văn hóa (unicode ascii vv). – maxfridbe

21

Có gì sai với tuyên bố ví dụ switch của bạn?

switch (text) 
{ 
    case null: 
    case "": 
     foo(); 
     break; 
    case "hi": 
     bar(); 
     break; 
} 

Nó hoạt động (và đối với một số lý do mà làm tôi ngạc nhiên - Tôi nghĩ rằng nó sẽ phàn nàn hoặc tai nạn trên trường hợp null) và rõ ràng.

Đối với vấn đề đó, tại sao bạn lo lắng về String.Empty? Tôi đang thiếu một cái gì đó ở đây.

+0

Tôi thậm chí không bận tâm để thử điều này vì vậy trường hợp null hoạt động hmmm ... – JoshBerke

3

Chuỗi trống là "", bằng String.Empty. Lý do bạn có thể đặt "" trong tuyên bố trường hợp chứ không phải "String.Empty" là "Empty" là trường của lớp "String" và "" thực sự là giá trị contant.

Giá trị không đổi được cho phép trong trường hợp, String.Empty là trường và có thể được thay đổi vào thời gian chạy. (Trong trường hợp này, nó sẽ vẫn giữ nguyên, nhưng không phải tất cả các trường tĩnh của mỗi lớp là các giá trị không đổi.)

Trong trường hợp 'if', điều kiện đó được đánh giá vào thời gian chạy và nếu không yêu cầu giá trị hiện có.

Tôi hy vọng điều này giải thích lý do.

3

Điều mà tôi vừa nhận thấy là bạn có thể kết hợp nếu/và chuyển đổi câu lệnh! Rất hữu ích khi cần kiểm tra điều kiện tiên quyết.

if (string.IsNullOrEmpty(text)) 
{ 
    //blah 
} 
else switch (text) 
{ 
    case "hi": 
     Console.WriteLine("How about a nice game of chess?"); 
     break; 
    default: 
     break; 
} 
+2

Có người chỉ ra một bài viết liên quan trên SO rằng điều này không thực sự kết hợp các câu lệnh, nhưng mệnh đề khác chỉ là không có dấu ngoặc nhọn, vì vậy chuyển đổi là câu lệnh duy nhất được thực hiện. Đây là cú pháp giống như câu trả lời của Josh. Tôi nghĩ rằng nó có vẻ tốt đẹp mặc dù. –

0
string StrMode; 
if (!string.IsNullOrEmpty(StrMode)) 
{ 
    switch (StrMode.Trim()) 
    { 
     case "Souse": 
     { 
      //Statement Eg: 
      MesssageBox.Show("Souse"); 
      break; 
     } 

     case "Company Agent": 
     { 
      //Statement Eg: 
      MesssageBox.Show("Souse"); 
      break; 
     } 

     default: 
      return; 
    } 
} 
Các vấn đề liên quan