Тип "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
{
...
}

http://msdn.microsoft.com/en-us/library/d5x73970.aspx