2010-11-10 80 views
20

Tôi có một danh sách:C# struct, cách gán giá trị null?

List<int, SomeStruct> 

Đối với một số lý do, nó không cho phép tôi để gán giá trị null để nó. Tôi phải làm gì nếu tôi không có cấu trúc liên quan?

Trả lời

36

Sử dụng nullable types:

List<int, SomeStruct?> 

Bạn không thể gán null đến một phần tử của danh sách bởi vì cấu trúc là kiểu giá trị, trong khi null nghĩa một con trỏ rỗng, và vì vậy chỉ có thể được gán để tham khảo các biến kiểu.

Cũng lưu ý rằng List vì bạn đang sử dụng nó không tồn tại trong .NET! Có lẽ bạn muốn Dictionary?

+0

Khi tôi thực hiện việc này, bất kỳ tham chiếu nào của cấu trúc giờ đây đều cho tôi lỗi: System.Nullable <> không chứa định nghĩa cho 'Member' –

+1

@whydna: Đọc trên các loại có thể vô hiệu. Về cơ bản 'SomeStruct? 'Là cú pháp đường cho' Nullable '. Bạn không thể truy cập trực tiếp vào thành viên, nhưng đó là mức giá bạn trả cho việc sử dụng ngữ nghĩa 'null' với một loại giá trị. –

+0

Cảm ơn sự giúp đỡ của bạn :) –

10

Trong C# cấu trúc là 'loại giá trị', không được rỗng.

Nếu bạn thực sự, thực sự cần phải có khả năng vô hiệu hóa điều này, sau đó biến nó thành loại 'không thể' bằng cách thêm dấu chấm hỏi.

Bạn có lẽ nên xem xét chi tiết về điều này đầu tiên hơn, mặc dù - rất có thể bạn không thực sự muốn có 'cấu trúc' nào cả, nhưng sẽ tốt hơn với 'lớp'.

+3

Đồng ý. Vấn đề là tôi không sở hữu cấu trúc, tôi chỉ đơn giản là sử dụng nó: ( –

3

Trừ khi bạn đã xác định bộ sưu tập chung tùy chỉnh, List<T, U> không tồn tại trong không gian tên System.Collections.Generic. Ý của bạn là có nghĩa là Dictionary<TKey, TValue>?

Bạn có thể sử dụng các loại Nullable: Using Nullable Types (C# Programming Guide).

Đối với bất kỳ ValueType nào, bạn cần chỉ định rõ ràng rằng bạn sẽ cho phép giá trị null cho loại của bạn. Bạn có thể làm như vậy bằng cách ghép các ký tự '?' với tên loại của bạn hoặc bằng cách đánh dấu nó là Nullable, trong đó T là tên cấu trúc của bạn.

+1

Tôi không thể chống trả lời khi tôi thấy có ba 'Will' trả lời một câu hỏi! = P –

+5

Nơi có ba Wills ở đó ba cách là gì? – RenniePet

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