Тип "string" должен быть непустым, чтобы использовать его как параметр T в родовом типе или методе "System.Nullable <T>"
Почему я получаю сообщение об ошибке "Тип" string "должен быть невообразимым типом значения, чтобы использовать его как параметр" 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; }
}
}
}
Ответы
Ответ 1
Используйте string
вместо string?
во всех местах вашего кода.
Тип Nullable<T>
требует, чтобы T был недействительным типом значения, например int
или DateTime
. Такие ссылочные типы, как string
, уже могут быть нулевыми. Не было бы смысла разрешать такие вещи, как Nullable<string>
, поэтому он не разрешен.
Также, если вы используете С# 3.0 или более позднюю версию, вы можете упростить свой код, используя автоматически реализованные свойства:
public class WordAndMeaning
{
public string Word { get; set; }
public string Meaning { get; set; }
}
Ответ 2
string
является ссылочным типом, классом. Вы можете использовать Nullable<T>
или синтаксический сахар T?
С# с типами с нулевыми значениями, такими как int
и Guid
.
В частности, поскольку string
является ссылочным типом, выражение типа string
уже может иметь значение null:
string lookMaNoText = null;
Ответ 3
System.String уже имеет значение NULL: вам не нужно объявлять ее как таковой (строка? myStr) неверна.
Ответ 4
По особой причине Type Nullable<int>
наведите курсор на Nullable и нажмите F12. Метаданные приводят причину (обратите внимание на ограничение структуры):
public struct Nullable<T> where T : struct
{
...
}
http://msdn.microsoft.com/en-us/library/d5x73970.aspx