Как я могу сделать свойство строки обнуляемым?

Я хочу сделать второе имя человека необязательным. Я использую код С#.net первый подход. Для целочисленного типа данных это просто с помощью ? Оператор сделать в Nullable. Я ищу способ сделать мою переменную жала обнуляемой. Я пытался искать, но не мог найти способ сделать его обнуляемым.

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

public class ChildrenInfo
{
    [Key]
    public int ChidrenID { get; set; }

    [Required]
    [Display(Name ="First Name")]
    [StringLength(50,ErrorMessage ="First Name cannot exceed more than 50 characters")]
    [RegularExpression(@"^[A-Z]+[a-z]*$",ErrorMessage ="Name cannot have special character,numbers or space")]
    [Column("FName")]
    public string CFName { get; set; }

    [Display(Name ="Middle Name")]
    [RegularExpression(@"^[A-Z]+[a-z]*$",ErrorMessage ="Middle Name cannot have special character,numbers or space")]
    [StringLength(35,ErrorMessage ="Middle Name cannot have more than 35 characters")]
    [Column("MName")]
    public string? CMName { get; set; }
}   

Ответ 1

String является ссылочным типом и всегда имеет значение null, вам не нужно ничего делать. Указание того, что тип является нулевым, необходимо только для типов значений.

Ответ 2

System.String - ссылочный тип, поэтому вам не нужно ничего делать, например

Nullable<string>

У него уже есть нулевое значение (нулевая ссылка):

string x = null; // No problems here

Ответ 3

Строки нольбелы в С# в любом случае, потому что они являются ссылочными типами. Вы можете просто использовать public string CMName { get; set; }, и вы сможете установить его значение null.

Ответ 4

Как указывали другие, строка всегда имеет значение NULL в С#. Я подозреваю, что вы задаете вопрос, потому что вы не можете оставить среднее имя пустым или пустым? Я подозреваю, что проблема связана с вашими атрибутами проверки, скорее всего, с RegEx. Я не могу полностью разобрать RegEx в своей голове, но я думаю, ваш RegEx настаивает на том, что первый персонаж присутствует. Я мог ошибаться - RegEx сложно. В любом случае попробуйте прокомментировать атрибуты проверки и посмотреть, работает ли он, а затем добавить их обратно по одному.

Ответ 5

после публикации c # 8.0 теперь вы можете ссылаться на типы, которые также могут быть обнуляемыми. Для этого вы должны добавить

#nullable enable
Функция

над вашим пространством имен. Подробно здесь

например, что-то вроде этого будет работать:

#nullable enable
namespace TestCSharpEight
{
  public class Developer
  {
    public string FullName { get; set; }
    public string UserName { get; set; }

    public Developer(string fullName)
    {
        FullName = fullName;
        UserName = null;
    }
}}

Также вы можете посмотреть эту замечательную статью от Джона Скита, в которой объясняются подробности.

Ответ 6

string type является ссылочным типом, поэтому по умолчанию он равен нулю. Вы можете использовать только Nullable<T> со значениями типов.

public struct Nullable<T> where T : struct

Это означает, что любой тип заменен для общего параметра, он должен быть типом значения.

Ответ 7

Невозможно сделать ссылочные типы Nullable. В структуре Nullable могут использоваться только типы значений. Добавление знака вопроса к имени типа значения делает его нулевым. Эти две строки одинаковы:

int? a = null;
Nullable<int> a = null;

Ответ 8

Вам не нужно ничего делать, привязка модели будет передавать значение null в переменную без проблем.