Тип "string" должен быть ненулевым типом, чтобы использовать его в качестве параметра T в системе универсального типа или метода.Значения null '
почему я получаю ошибку " тип "string" должен быть ненулевым типом значения, чтобы использовать его в качестве параметра " T " в системе универсального типа или метода.Значения null'"?
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; }
}
}
}
4 ответов
использовать string
вместо string?
во всех местах в коде.
The Nullable<T>
type требует, чтобы T был ненулевым типом значения, например int
или DateTime
. Ссылочные типы как string
уже может быть null. Не было никакого смысла позволять таким вещам, как Nullable<string>
поэтому он запрещен.
также, если вы используете C# 3.0 или более позднюю версию, вы можете упростить свой код с помощью автоматически реализуемые свойства:
public class WordAndMeaning
{
public string Word { get; set; }
public string Meaning { get; set; }
}
string
является ссылочным типом, классом. Вы можете использовать только Nullable<T>
или T?
C# синтаксический сахар с ненулевым стоимостью типы, такие как int
и Guid
.
в частности, как string
является ссылочным типом, выражения типа string
уже может быть null:
string lookMaNoText = null;
по очень конкретной причине введите Nullable<int>
поместите курсор на Nullable и нажмите F12-метаданные предоставляют причину (обратите внимание на ограничение struct):
public struct Nullable<T> where T : struct
{
...
}