Свойство или индексатор System.Nullable.Value нельзя назначить - оно доступно только для чтения - PullRequest
4 голосов
/ 11 января 2011

Я разрабатываю приложение winform. Основываясь на некоторых значениях (скажем, x), я хочу показать пользователю предупреждение, таймер обновил другое значение (y), которое влияет на x, и проверить значение x и показать предупреждение пользователю. Оповещение показывает окно сообщения с опциями да / нет, если пользователь нажимает да, то некоторая обработка.

Если пользователь не отвечал на предупреждение в течение длительного времени (скажем, 10 минут), может отображаться несколько сообщений с предупреждениями, я хочу предотвратить создание переменной DialogResult со значением NULL, чтобы я мог проверить, выбрал ли пользователь какую-либо опцию или не. Теперь проблема в том, что он не позволяет мне установить значение этой переменной

taskAlert.Value=MessageBox.Show(kMessage, appErrorTitle, MessageBoxButtons.YesNo);

Я выдаю сообщение об ошибке: нельзя присвоить свойство или индексатор 'System.Nullable.Value' - оно доступно только для чтения

Ответы [ 2 ]

7 голосов
/ 11 января 2011

Проблема в том, что вы пытаетесь присвоить непосредственно свойству Value. Свойство Value помечено как доступное только для чтения, поэтому компилятор отображает эту ошибку.

Вместо этого вы должны присвоить значение переменной типа Nullable<T> точно так же, как и любой другой тип. Например, приведенный выше код будет просто:

taskAlert = MessageBox.Show(kMessage, appErrorTitle, MessageBoxButtons.YesNo);

Единственное, что изменяется, это доступ к значению. Сначала вам нужно проверить свойство HasValue , и если оно вернет True, вы получите значение, используя свойство Value . Если свойство HasValue возвращает значение False, тогда значение объекта не определено.

1 голос
/ 11 января 2011

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

Перечисление DialogResult имеет значение "Нет", которое может использоваться для указания того, что пользователь не выбрал параметр.

...