Ответ 1
String является ссылочным типом и всегда имеет значение null, вам не нужно ничего делать. Указание того, что тип является нулевым, необходимо только для типов значений.
Я хочу сделать второе имя человека необязательным. Я использую код С#.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; }
}
String является ссылочным типом и всегда имеет значение null, вам не нужно ничего делать. Указание того, что тип является нулевым, необходимо только для типов значений.
System.String - ссылочный тип, поэтому вам не нужно ничего делать, например
Nullable<string>
У него уже есть нулевое значение (нулевая ссылка):
string x = null; // No problems here
Строки нольбелы в С# в любом случае, потому что они являются ссылочными типами. Вы можете просто использовать public string CMName { get; set; }
, и вы сможете установить его значение null.
Как указывали другие, строка всегда имеет значение NULL в С#. Я подозреваю, что вы задаете вопрос, потому что вы не можете оставить среднее имя пустым или пустым? Я подозреваю, что проблема связана с вашими атрибутами проверки, скорее всего, с RegEx. Я не могу полностью разобрать RegEx в своей голове, но я думаю, ваш RegEx настаивает на том, что первый персонаж присутствует. Я мог ошибаться - RegEx сложно. В любом случае попробуйте прокомментировать атрибуты проверки и посмотреть, работает ли он, а затем добавить их обратно по одному.
после публикации 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;
}
}}
Также вы можете посмотреть эту замечательную статью от Джона Скита, в которой объясняются подробности.
string
type является ссылочным типом, поэтому по умолчанию он равен нулю. Вы можете использовать только Nullable<T>
со значениями типов.
public struct Nullable<T> where T : struct
Это означает, что любой тип заменен для общего параметра, он должен быть типом значения.
Невозможно сделать ссылочные типы Nullable. В структуре Nullable могут использоваться только типы значений. Добавление знака вопроса к имени типа значения делает его нулевым. Эти две строки одинаковы:
int? a = null;
Nullable<int> a = null;
Вам не нужно ничего делать, привязка модели будет передавать значение null в переменную без проблем.