C # структура, как присвоить нулевое значение? - PullRequest
23 голосов
/ 10 ноября 2010

У меня есть список:

List<int, SomeStruct>

По какой-то причине он не позволяет мне присваивать ему нулевые значения.Что мне делать, если я не хочу иметь связанную структуру?

Ответы [ 3 ]

42 голосов
/ 10 ноября 2010

Использование Обнуляемые типы :

List<int, SomeStruct?>

Вы не можете присвоить null элементу списка, потому что структуры являются типами значений, в то время как null означает пустой указатель и может быть назначен только переменным ссылочного типа.

Также обратите внимание, что List, поскольку вы используете его, не существует в .NET! Возможно, вы хотите Dictionary?

11 голосов
/ 10 ноября 2010

В C # структура - это «тип значения», который не может быть нулевым.

Если вам действительно нужно иметь возможность обнулить это, то превратите его в «обнуляемый» тип, добавив конечный знак вопроса.

Вы, вероятно, должны сначала рассмотреть детали этого более подробно - вполне вероятно, что вы на самом деле вообще не хотите использовать "struct", но было бы лучше с "class".

4 голосов
/ 10 ноября 2010

Если вы не определили пользовательскую универсальную коллекцию, List<T, U> не существует в пространстве имен System.Collections.Generic. Вы скорее имели в виду Dictionary<TKey, TValue>?

Вы можете использовать типы Nullable: Using Nullable Types (C# Programming Guide).

Как и для любого ValueType, вам нужно явно указать, что вы разрешите пустые значения для вашего типа. Вы можете сделать это, объединив символ '?' с вашим именем типа или пометив его как Nullable, где T - имя вашей структуры.

...