2012-03-14 42 views
5

Tôi muốn loại bỏ dòng đầu tiên:string.IsNullOrEmpty sử dụng Trim()

    !string.IsNullOrEmpty(cell.Text) 

này sẽ gây ra bất kỳ vấn đề?

tôi chạy qua đây ở một số mã:

   if ((id % 2 == 0) 
        && !string.IsNullOrEmpty(cell.Text) 
        && !string.IsNullOrEmpty(cell.Text.Trim()) 
        ) 

Tôi nghĩ rằng string.IsNullOrEmpty đầu tiên sẽ trả về false về một chuỗi với không gian
và phù hợp với Trim() chăm sóc đó, vì vậy đầu tiên IsNullOrEmpty là vô ích

Nhưng trước khi tôi xóa đường mà không cắt, tôi nghĩ rằng tôi muốn chạy nó theo nhóm.

+2

bạn có nghĩa là string.IsNullOrWhitespace – nothrow

+0

Có quá khó để kiểm tra hoặc tìm kiếm các tài liệu chính thức? (http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx). Câu trả lời ngắn gọn: Không, một chuỗi các khoảng trống không phải là rỗng hoặc trống. – madth3

+3

Các bạn thiếu điểm. Có, bạn có thể sử dụng 'IsNullOrEmpty', nhưng OP bị nhầm lẫn về lý do tại sao cuộc gọi đầu tiên là cần thiết để tránh một' NullReferenceException'. Hiểu được điều đó quan trọng hơn nhiều so với việc chuyển sang một cuộc gọi phương thức khác bởi vì anh ta được yêu cầu làm như vậy. –

Trả lời

4

Các IsNullOrEmpty đầu tiên bắt các giá trị null trước khi họ ném một NullReferenceException với Trim() .

Tuy nhiên, có một cách tốt hơn:

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+2

Chỉ khả dụng trong .NET Framework 4 trở lên. – Chris

12

if cell.Text is null, bạn sẽ có ngoại lệ mà không có kiểm tra đầu tiên đó.

+3

nếu ô là TextBox, thuộc tính đó sẽ không bao giờ rỗng. – code4life

+0

Mà cũng có thể đạt được với 'cell.Text! = Null && cell.Text.Trim()! =" "' Nếu bạn vẫn có .NET <.NET 4.0. –

+0

LƯU Ý: ô là nội dung ô html bảng được sử dụng WebDriver (nhưng đó không phải là điểm của câu hỏi) –

8

Trong .NET 4.0:

if (id % 2 == 0 && !string.IsNullOrWhiteSpace(cell.Text)) 
{ 
    ... 
} 

Trong các phiên bản cũ hơn, bạn nên giữ cho hai bài kiểm tra vì nếu bạn loại bỏ đầu tiên và cell.Text là null, bạn sẽ nhận được một TNMT ngày thứ hai khi bạn cố gắng để gọi .Trim trên một cá thể rỗng.

Hoặc bạn cũng có thể làm điều này:

if (id % 2 == 0 && string.IsNullOrWhiteSpace((cell.Text ?? string.Empty).Trim())) 
{ 
    ... 
} 

hoặc thậm chí tốt hơn, bạn có thể viết một extension method cho kiểu chuỗi mà sẽ làm điều này để bạn có thể chỉ đơn giản là:

if (id % 2 == 0 && !cell.Text.IsNullOrWhiteSpace()) 
{ 
    ... 
} 

mà có thể trông giống như sau:

public static class StringExtensions 
{ 
    public static bool IsNullOrWhiteSpace(this string value) 
    { 
     return string.IsNullOrEmpty((value ?? string.Empty).Trim()); 
    } 
} 
+0

Tôi không nghĩ rằng một phương pháp tiện ích mở rộng tốt hơn trong tình huống này. Theo nguyên tắc chung, "không chấp nhận null dưới dạng tham số phương thức mở rộng hợp lệ". Các lập trình viên khác có thể giải thích điều này là 'Văn bản phải có giá trị bởi vì một phương thức có thể được gọi là'. –

0

Tôi tin rằng kiểm tra là đảm bảo rằng ô.text không phải là null đầu tiên ... nếu vậy, cố gắng bỏ qua nó và nhận được chỉ cell.text.trim() sẽ bị nghẹt thở như bạn không thể làm một trim trên một chuỗi null.

0

Tại sao không sử dụng !string.IsNullOrWhitespace(call.Text) và thả hai lần kiểm tra trước?

0

Bạn không thể loại bỏ chỉ IsNullOrEmpty đầu tiên dưới dạng ô.Text có thể là rỗng và do đó, gọi Trim trên nó sẽ ném và ngoại lệ. Sử dụng IsNullOrWhiteSpace nếu bạn đang sử dụng .Net 4.0 hoặc để lại cả hai séc.

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+0

Có, nhưng điều này không trả lời được câu hỏi. Rõ ràng OP bị nhầm lẫn về cách biểu thức câu lệnh if (s) được đánh giá. –

+0

Đã cập nhật. Cảm ơn. –

0

Nếu ô.Text là null, chuỗi biểu thức.IsNullOrEmpty (cell.Text.Trim()) sẽ ném một ngoại lệ vì nó đang cố chạy phương thức Trim() trên ô.

nhiều readble hơn nếu điều kiện sẽ là:! Cell.Text = null & & cell.Text.Trim() = ""

0

Bạn có thể sử dụng phương pháp mở rộng như thế này:

/// <summary> 
/// Indicates whether the specified string is null or empty. 
/// This methods internally uses string.IsNullOrEmpty by trimming the string first which string.IsNullOrEmpty doesn't. 
/// .NET's default string.IsNullOrEmpty method return false if a string is just having one blank space. 
/// For such cases this custom IsNullOrEmptyWithTrim method is useful. 
/// </summary> 
/// <returns><c>true</c> if the string is null or empty or just having blank spaces;<c>false</c> otherwise.</returns> 
public static bool IsNullOrEmptyWithTrim(this string value) 
{ 
    bool isEmpty = string.IsNullOrEmpty(value); 
    if (isEmpty) 
    { 
     return true; 
    } 
    return value.Trim().Length == 0; 
} 
Các vấn đề liên quan