2009-08-07 38 views
5

tôi có một tài sản đã tuyên bố như sau:Có cách nào tốt hơn để viết dòng mã C# này trong C# 3.0 không?

public decimal? MyProperty { get; set; } 

tôi cần phải vượt qua giá trị này vào phương pháp khác như là một chuỗi và vì vậy cách duy nhất tôi thấy làm như vậy là như sau:

MyProperty == null ? null : MyProperty.ToString() 

Điều này có vẻ rất lộn xộn khi bạn có một số thuộc tính tương tự được chuyển vào một phương thức.

Có ai biết nếu có cách viết hay hơn và ngắn gọn hơn không?

Oh, và nếu có ai có thể nghĩ đến một tiêu đề thích hợp hơn cho câu hỏi này xin vui lòng để thay đổi nó ...

Trả lời

15

Bạn có thể sử dụng Nullable<T>.ToString()override ...

var s = MyProperty.ToString(); // returns "" if MyProperty is null 
+0

Chà, thật sao? Đã học được điều gì đó mới mẻ. Tôi sẽ không bao giờ thử điều đó, nghĩ rằng nó sẽ ném một ngoại lệ con trỏ null – Paul

+0

Wow! Tôi không có ý tưởng. ToString vẫn làm việc cho một giá trị nullable là null. Thật tuyệt vời! – mezoid

+0

... Nhưng có vẻ như tác giả muốn có NULL nếu giá trị là NULL !! ?? –

1

Bạn có thể sử dụng HasValue thay vì so sánh:

MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
1

Make chuỗi có được tài sản trên lớp chứa tài sản và nó sẽ không được lộn xộn wen bạn cần phải nhận được t ông chuỗi phiên bản.

public decimal? MyProperty { get; set; } 

    public string MyPropertyString 
    { 
     get 
     { 
      return MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
     } 
    } 
1

Bạn có thể khai báo phương thức tiện ích mở rộng trên Thập phân.

public static string Str(this decimal? value) 
{ 
    return value == null ? null : MyProperty.ToString() 
} 

Sau đó, bạn gọi nó là như thế này:

MyProperty.Str() 
+0

Không. Nên có số thập phân **? ** (Không thể gửi) –

1

Nếu nó là ok có zero istead của null thì:

(MyProperty ?? 0).ToString() 

Nếu thêm phương pháp khuyến nông:

public static string AsString(this decimal? val) 
{ 
    return val == null ? null : val.Value.ToString(); 
} 

// Use: 
MyProperty.AsString() // This will NEVER cause NullReferenceException 
Các vấn đề liên quan