如何使我的字符串属性可以为空?

Sab*_*rma 44 c# asp.net-mvc entity-framework ef-migrations

我想让人的中间名可选.我一直在使用C#.net代码的第一种方法.对于整数数据类型,只需使用?运算符使其可以为空即可.我正在寻找一种让我的sting变量可以为空的方法.我试图搜索但找不到让它可以为空的方法.

以下是我的代码.请建议我如何让它可以为空.

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; }
}   
Run Code Online (Sandbox Code Playgroud)

aw0*_*w04 105

String是一个引用类型,并且始终可以为空,您不需要做任何特殊操作.只有值类型才需要指定类型可为空.

  • 在 C# 8.0 中,引用类型可能被标记为可为空。可以输入 `string?` 来告诉全世界这个字符串可能为空。参考:https://www.youtube.com/watch?v=VdC0aoa7ung (9认同)
  • 对于c#8+而言,这并非完全正确。使用c#8+字符串仍然可以为null,而使用#nullable则可以对字符串使用nullable运算符。 (2认同)

nzr*_*tmn 11

C# 8.0现已发布,因此您也可以将引用类型设为可空。为此,您必须添加

#nullable enable
Run Code Online (Sandbox Code Playgroud)

在您的命名空间上的功能。这里有详细说明

例如,这样的事情将起作用:

#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;
    }
}}
Run Code Online (Sandbox Code Playgroud)

你也可以看看John Skeet 的这篇很好的文章,它解释了细节。

  • 我认为@ShahryarSaljoughi 的观点是你的代码没有使用新的“string?”类型。 (6认同)
  • 这段代码在 c# 8.0 之前可以工作,不是吗?它只是为属性分配一些空值。 (2认同)

Kas*_*afa 8

System.String是一个引用类型,因此您不需要执行任何操作

Nullable<string>
Run Code Online (Sandbox Code Playgroud)

它已经有一个空值(空引用):

string x = null; // No problems here
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 5

字符串在C#中还是可以为空的,因为它们是引用类型。您可以使用public string CMName { get; set; }并将其设置为null。

  • 每个类型都是C#中的一个对象(通过继承)。字符串可以为空的原因是它们是引用类型的实例。 (2认同)