2011-11-21 65 views
67

Tôi tiếp tục gặp lỗi này khi chạy chương trình.Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng.

Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng. Mô tả: Một ngoại lệ không được xử lý xảy ra trong khi thực hiện yêu cầu web hiện tại. Vui lòng xem lại dấu vết ngăn xếp để biết thêm thông tin về lỗi và vị trí bắt nguồn từ mã. Chi tiết ngoại lệ: System.NullReferenceException: Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng.

Source Error: 

Line with error: 

Line 156:  if (strSearch == "" || strSearch.Trim().Length == 0) 

cách chính xác nó nên được viết là gì?

+0

thêm trường hợp if (strSearch! = Null)? – ToddBFisher

+0

lỗi cho biết một đối tượng là null. Hoặc strSearch là null hoặc kết quả của strSearch.Trim() là null. Để kiểm tra, sử dụng câu trả lời của Graphain bằng cách sử dụng IsNullOrWhitespace. – Russell

Trả lời

93

Cách đúng trong .NET 4.0 là:

if (String.IsNullOrWhiteSpace(strSearch)) 

Phương pháp String.IsNullOrWhiteSpace sử dụng ở trên là tương đương với:

if (strSearch == null || strSearch == String.Empty || strSearch.Trim().Length == 0) 
// String.Empty is the same as "" 

tham chiếu cho phương pháp IsNullOrWhiteSpace

http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx

Cho biết chuỗi được chỉ định là Không có gì, trống hoặc chỉ bao gồm chỉ các ký tự trắng.

Trong các phiên bản trước đó, bạn có thể làm một cái gì đó như thế này:

if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0) 

Phương pháp String.IsNullOrEmpty sử dụng ở trên là tương đương với:

if (strSearch == null || strSearch == String.Empty) 

Có nghĩa là bạn vẫn cần phải kiểm tra của bạn "IsWhiteSpace" trường hợp với .Trim().Length == 0 theo ví dụ.

tham chiếu cho phương pháp IsNullOrEmpty

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx

Cho biết chuỗi định là có gì hay một chuỗi rỗng.

Giải thích:

Bạn cần phải đảm bảo strSearch (hoặc bất kỳ biến cho rằng vấn đề) không null trước khi bạn là dereference nó bằng cách sử dụng dấu chấm ký tự (.) - tức là trước khi bạn làm strSearch.SomeMethod() hoặc strSearch.SomeProperty bạn cần kiểm tra xem strSearch != null.

Trong ví dụ của bạn, bạn muốn chắc chắn chuỗi bạn có giá trị, có nghĩa là bạn muốn đảm bảo chuỗi:

  • là không null
  • Không phải là chuỗi rỗng (String.Empty/"")
  • Không chỉ là khoảng trắng

Trong trường hợp trên, bạn phải đặt "Có rỗng không?" trường hợp đầu tiên, do đó, nó không đi vào để kiểm tra các trường hợp khác (và lỗi) khi chuỗi là null.

+1

Bạn đang thiếu kết thúc) của nếu –

+0

+1. Nhưng đó chỉ là .Net 4.0 hoặc cao hơn. –

+1

Thật tuyệt khi có một lớp Mở rộng phương pháp để thực hiện việc kiểm tra này: public static IsEmptyOrWhiteSpace (giá trị chuỗi này) { return String.IsEmptyOrWhiteSpace (giá trị); – MrSnowflake

4

strSearch trong trường hợp này có thể là null (không đơn giản là trống).

Hãy thử sử dụng

String.IsNullOrEmpty(strSearch)

nếu bạn đang cố gắng để xác định xem chuỗi không có bất kỳ nội dung.

+0

Điều này không giúp ích nếu chuỗi của anh ấy chứa khoảng trắng. –

+0

Câu hỏi ban đầu đã tìm kiếm một chuỗi dài 0, do đó, nghiêm chỉnh đó sẽ là một yêu cầu hơi khác nhau. –

+0

@Handsome Cam: Bây giờ tôi đang gặp lỗi trên dòng này. Tôi nghĩ nó không được diễn đạt chính xác. string strSearch = Yêu cầu ["txtSearchName"]. ToString(); – Mike

21

Tất cả các phiên bản của Net:

if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0) 

Net 4.0 trở lên:

if (String.IsNullOrWhitespace(strSearch)) 
1

tôi muốn mở rộng câu trả lời MattMitchell bằng cách nói rằng bạn có thể tạo ra một phương pháp mở rộng cho chức năng này:

public static IsEmptyOrWhitespace(this string value) { 
    return String.IsEmptyOrWhitespace(value); 
} 

Điều này giúp bạn có thể gọi:

string strValue; 
if (strValue.IsEmptyOrWhitespace()) 
    // do stuff 

Đối với tôi, tính năng này sạch hơn rất nhiều so với chức năng tĩnh String, trong khi vẫn là NullReference an toàn!

3

Tôi biết điều này đã được đăng khoảng một năm trước, nhưng điều này là dành cho người dùng để tham khảo trong tương lai.

Tôi gặp phải vấn đề tương tự. Trong trường hợp của tôi (tôi sẽ cố gắng để được ngắn gọn, xin vui lòng cho tôi biết nếu bạn muốn biết thêm chi tiết), tôi đã cố gắng để kiểm tra xem một chuỗi có sản phẩm nào hay không (chuỗi là chủ đề của một email). Nó luôn luôn trả về thông báo lỗi tương tự bất kể tôi đã làm gì. Tôi biết tôi đã làm điều đó đúng nhưng nó vẫn tiếp tục ném cùng một thông báo lỗi. Sau đó, tôi nhận ra rằng, tôi đã kiểm tra xem chủ đề (chuỗi) của một email (ví dụ/đối tượng), nếu email (ví dụ) đã là một null ở nơi đầu tiên. Làm thế nào tôi có thể kiểm tra cho một chủ đề của một email, nếu email đã là một null..i kiểm tra nếu các email được sản phẩm nào, nó làm việc tốt.

trong khi kiểm tra đối tượng (chuỗi) tôi đã sử dụng phương thức IsNullorWhiteSpace(), IsNullOrEmpty().

if (email == null) 
{  
    break;  
} 
else 
{  
    // your code here  
} 
+0

Do ngắn mạch, bạn có thể có một cái gì đó như 'if (email == null || email.subject.IsNullOrWhiteSpace()) {....', và nó sẽ xử lý một phần email rỗng tốt –

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