2010-11-01 55 views
14

Khi tôi hiểu mặc định (đối tượng) trong đó 'đối tượng' là bất kỳ loại tham chiếu nào luôn trả về giá trị rỗng, nhưng tôi có thể chỉ định mặc định là gì không? Ví dụ, tôi muốn mặc định (object) == new object();Chỉ định giá trị mặc định cho loại tham chiếu

+1

Không, không thể. Bạn có thể cho chúng tôi biết mục tiêu cuối cùng ở đây không, tức là tại sao bạn muốn tính năng này? – Ani

+0

No. Và tại sao bạn cần phải làm điều đó? Nếu đối tượng là null, chỉ cần gán một đối tượng mới! –

+1

Chỉ để có thể nói FirstOrDefault() và không bao giờ nhận được một null. Đoán tôi sẽ chỉ viết một phương pháp mở rộng mới sau đó. –

Trả lời

25

số default(type) sẽ luôn luôn trở lại điều tương tự - một "zero' ed out "phiên bản của loại đó. Đối với một kiểu tham chiếu, đây là một xử lý đối với một đối tượng luôn được đặt với một giá trị bằng 0 - tương đương với null. Đối với một loại giá trị, đây luôn là cấu trúc với tất cả các thành viên được đặt thành 0.

Không có cách nào để ghi đè hành vi này - đặc tả ngôn ngữ được thiết kế theo cách này.


Edit: Như khi viết phản hồi:

Chỉ cần để có thể nói FirstOrDefault() và không bao giờ có được một null.

Tôi không khuyến khích điều này trong mọi trường hợp. Người dùng mong đợi FirstOrDefault() để trả lại null về lỗi. Sẽ tốt hơn nếu bạn viết phương pháp mở rộng của riêng mình:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 
3

Xin lỗi, tôi không phải là Jon Skeet ...

Nhưng dù sao, câu trả lời là "không có bạn có thể không phải là"

+6

Thông thường Jon Skeet giải thích lý do tại sao (hoặc tại sao không phải trong trường hợp này) :) – PostMan

+0

@PostMan, như tôi đã nói, tôi không phải là Jon Skeet;). Dù sao, tôi không nghĩ có bất cứ điều gì để giải thích ở đây ... nó chỉ là không thể. –

+0

Chỉ cần làm cho nó lên, bạn sẽ được tốt :) Nhưng có, tôi đồng ý, không có lời giải thích khác hơn bạn không thể. (ngoài quyết định thiết kế) – PostMan

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