Почему я получаю сообщение об ошибке «Тип« строка »должен иметь тип значения, не допускающий значения NULL, чтобы использовать его в качестве параметра« T »в универсальном типе или методе« System.Nullable »»?
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Universe;
namespace Universe
{
public class clsdictionary
{
private string? m_Word = "";
private string? m_Meaning = "";
string? Word {
get { return m_Word; }
set { m_Word = value; }
}
string? Meaning {
get { return m_Meaning; }
set { m_Meaning = value; }
}
}
}
String
уже обнуляется.Ответы:
Используйте
string
вместоstring?
всех мест в вашем коде.Nullable<T>
Тип требует , что Т представляет собой ненулевое значение , тип, например ,int
илиDateTime
. Типы ссылок вродеstring
уже могут быть нулевыми. Не было бы никакого смысла разрешать подобные вещи,Nullable<string>
поэтому это запрещено.Также, если вы используете C # 3.0 или более позднюю версию, вы можете упростить свой код с помощью автоматически реализуемых свойств :
источник
string
это ссылочный тип, класс. Вы можете использоватьNullable<T>
илиT?
синтаксический сахар C # только с необнуляемыми типами значений, такими какint
иGuid
.В частности, как
string
и ссылочный тип, выражение типаstring
может уже иметь значение null:источник
System.String
(с заглавной буквы S) уже имеет значение null, вам не нужно объявлять его как таковой.(string? myStr)
неправильно.источник
По очень конкретной причине Type
Nullable<int>
наведите курсор на Nullable и нажмите F12 - Метаданные предоставляют причину (обратите внимание на ограничение структуры):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
источник
Nullable<Nullable<int>>
это запрещено, хотяNullable<int>
это структура.Обратите внимание, что в следующей версии C #, которая 8, ответы не верны.
All the reference types are non-nullable by default
и вы можете сделать следующее:Тем не мение,
Здесь важно показать цель вашего кода. Если «намерение» состоит в том, что ссылочный тип может быть пустым, то пометьте его так, чтобы в противном случае присвоение пустому значению ненулевого значения привело к предупреждению компилятора.
Больше информации
источник