2009-10-11 27 views
19

Tôi chưa bao giờ sử dụng các loại không có giá trị trong mã C# của mình. Bây giờ tôi đã quyết định thay đổi thực hành mã hóa của tôi bằng cách giới thiệu các loại nullable trong mã của tôi.Thực hành mã hóa cho C# Loại khó đọc

Những thay đổi lớn trong thực hành mã hóa nên được thực hiện trong khi thực hiện chuyển đổi từ kiểu dữ liệu bình thường thành kiểu dữ liệu có thể vô hiệu hóa trong trường hợp lập trình ứng dụng?

Các khu vực cần được chăm sóc là gì?

Những điểm tôi nên luôn luôn chú ý là gì?

Trả lời

11

Nullable<T> hữu ích khi bạn cần trạng thái không hợp lệ có thể cho loại giá trị hoặc nếu dữ liệu đang được truy lục từ cơ sở dữ liệu có thể chứa giá trị null cho cột. Nó là rất phổ biến trong một số mã FORTRAN cũ tôi đang chuyển sang C# cho các giá trị không hợp lệ là âm hoặc 0, nhưng điều này là phiền hà đặc biệt là khi các giá trị được sử dụng trong các hàm toán học. Rõ ràng hơn là sử dụng Nullable<T> để hiển thị trạng thái không hợp lệ có thể có.

Điều đáng nói rằng đây là giống nhau:

Nullable<int> myNullableInt; 
int? myNullableInt; 
+10

Mẹo: Đừng quên, giá trị null từ cơ sở dữ liệu được biểu diễn như DBNull.Value bởi ADO.NET. Đảm bảo sử dụng DBNull.Value để giao tiếp với DB thay vì null của Nullable . –

18

Không sử dụng các loại không có giá trị vì chúng là một "điều mới mẻ" mà bạn đã khám phá. Sử dụng chúng khi chúng được áp dụng và thực sự hữu ích.

Có tổng chi phí sử dụng chúng và nếu được sử dụng không chính xác, chúng sẽ làm tăng độ phức tạp của mã của bạn một cách không cần thiết.

Bạn cũng phải cẩn thận để tránh các tham chiếu rỗng, vì vậy, chúng đặt gánh nặng phụ thêm vào các lập trình viên làm việc với mã đó. (Trong một số trường hợp, điều này phù hợp hơn với chi phí của một cách tiếp cận giải pháp thay thế!)

+0

Đây không phải là ý tưởng hay. Coz không ai biết những gì thay đổi đang đến trong khuôn khổ .net và có thể là sự thay đổi đó hoàn toàn dựa trên các loại Nullable. – anonymous

+5

@JMSA: Tôi không hiểu những gì bạn đang cố gắng nói. –

+1

+1. Nullable loại cực kỳ hữu ích khi bạn cần chúng, nhưng Jason của quyền về tránh gánh nặng người gọi với sự cần thiết phải kiểm tra giá trị so với null tất cả các thời gian. Xem xét ném một ngoại lệ nếu null không hợp lệ. – TrueWill

1

Tôi hiếm khi sử dụng các loại không có giá trị. Nơi duy nhất tôi đã sử dụng chúng là khi tôi xử lý các kiểu null trong cơ sở dữ liệu.

5

Một vài ý tưởng tốt khác cho việc sử dụng các loại nullable:

  • Đừng quên sự linh hoạt trong cú pháp. Nullable<int> giống với int?
  • Kiểm tra giá trị rỗng (var.HasValue) và đưa nó vào loại cơ sở trước khi sử dụng làm loại cơ sở.
+0

'truyền nó thành loại cơ sở trước khi sử dụng nó làm loại cơ sở.' - Tôi không làm theo những gì bạn có ý nghĩa ở đây ... Nếu bạn muốn giá trị, chỉ cần sử dụng 'var.Value', hoặc thậm chí 'var' nếu bạn đã kiểm tra nó có một giá trị. – nicodemus13

+0

Ồ, tôi làm theo những gì bạn muốn nói ở đây; bạn có nghĩa là khi gán nó cho một biến mới của kiểu cơ bản? – nicodemus13

+0

Có. I E. luôn luôn kiểm tra để chắc chắn rằng Nullable của bạn có giá trị trước khi đặt giá trị đó vào một int. – LJM

2

Chúng có vẻ phù hợp với giá trị bắt đầu của một số biến loại giá trị.

int? lastCodeReceived; 

if (lastCodeReceived.HasValue) 
{ 
    // At least one code has been received. 
} 
8

Bên cạnh đó tôi tìm thấy những tài sản sau đây hữu ích:

public bool? IsHappy { get; set; } 

này cho phép tôi để có một tri-state giá trị boolean: có, không, không trả lời.

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