2017-10-05 16 views
6

tôi có mã này:điều hành mới trở về null - C#

public ObjectModel.Path GetPath(int pathid) 
{ 
    var path = this.DbContext.Paths.Find(pathid); 
    var app = GetApplicationById(path.ApplicationId.GetValueOrDefault()); 

    var p = new Path 
    { 
     ApplicationId = path.ApplicationId, 
     Id = path.Id, Password = path.Password, 
     UserName = path.UserName, 
     LocalUrl = string.IsNullOrEmpty(path.LocalUrl) ? null : System.IO.Path.Combine(path.LocalUrl, app.Name) 

    }; 


    return p; 
} 

Biến p luôn là null. Làm thế nào là điều này posible?

Dưới đây là một màn hình in về những gì tôi đang nói về:

enter image description here

Tôi cũng thử với các cửa sổ ngay lập tức tôi nhận điều này:

enter image description here

p THỂ KHÔNG NULL kể từ im tạo ra một thể hiện mới của nó trong khi tất cả các thuộc tính của nó không phải là null. Tôi đã thử làm sạch dự án, khởi động lại các cửa sổ, mở studio trực quan với tư cách là quản trị viên và không có gì xảy ra.

Bất kỳ ý tưởng nào tại sao?

Ứng dụng đang chạy trên .net 4.0, studio trực quan 2017 v15.2 (26430.13) relase.

+1

Có thể chỉ là trình gỡ lỗi của bạn. Bạn đang gỡ lỗi với tối ưu hóa trên (tức là chế độ phát hành)? Để kiểm tra lý thuyết chỉ cần thêm một kiểm tra null và ném một 'ArgumentNullException' mới, nếu bạn nhận được ngoại lệ trong khi gỡ lỗi thì nó là null (* mà tôi nghi ngờ vì nó không nên có khả năng *) và nếu không thì đó là trình gỡ lỗi của bạn. – Igor

+0

@Igor Không, im trong chế độ gỡ lỗi. –

+4

Lớp 'Path' có ghi đè' ToString' hay nó được trang trí với bất kỳ thuộc tính nào có tên bắt đầu bằng "Debugger" không? – Amy

Trả lời

10

Biến của bạn không phải là rỗng.

Trình gỡ lỗi theo mặc định cố gắng hiển thị nội dung của phương thức ToString() khi quá tải. Trong trường hợp này nó hiển thị (propably) giá trị Uri hoặc FtpUrl là null.

Cố gắng nhấp vào hình tam giác nhỏ trên biến của bạn khi bạn di chuột qua đó bạn sẽ thấy toàn bộ nội dung của biến.

+3

Câu trả lời hay, nhưng một câu hỏi: trình gỡ lỗi gọi 'ToString()' bất kể nó được ghi đè hay không, * trừ khi * 'DebuggerDisplayAttribute' được chỉ định trên loại. – Amy

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