web-dev-qa-db-ja.com

文字列プロパティをnull可能にするにはどうすればよいですか?

個人のミドルネームをオプションにします。私はC#.netコードファーストアプローチを使用しています。整数データ型の場合、?演算子を使用してNULL可能にするだけで簡単です。スティング変数をヌル可能にする方法を探しています。検索しようとしましたが、null可能にする方法が見つかりませんでした。

以下は私のコードです。 null可能にする方法を提案してください。

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; }
}   
39

文字列は参照型であり、常にnull可能です。特別なことをする必要はありません。型がNULL可能であることを指定する必要があるのは、値の型の場合のみです。

98
aw04

System.Stringは参照型なので、次のようなことをする必要はありません。

Nullable<string>

すでにnull値(null参照)があります:

string x = null; // No problems here
8
Kashif Mustafa

いずれにしても、文字列は参照型であるため、C#ではNULL可能です。 public string CMName { get; set; }を使用するだけで、nullに設定できます。

5
Tim

他の人が指摘しているように、C#では文字列は常にnull可能です。ミドルネームをnullまたは空白のままにできないので、質問しているのではないかと思います。問題は検証属性、おそらくRegExにあると思われます。私は頭の中で正規表現を完全に解析することはできませんが、私は思考正規表現が存在する最初の文字を主張しています。私は間違っている可能性があります-RegExは難しいです。いずれにせよ、検証属性をコメントアウトして、それが機能するかどうかを確認し、一度に1つずつ追加し直してください。

1
Frans

c#8. が公開された後、nullを許可する型を参照できるようになりました。このために追加する必要があります

#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;
    }
}}

また、詳細を説明しているJohn Skeetの この素敵な記事 を見ることができます。

1
nzrytmn

stringタイプは参照タイプであるため、デフォルトではNULL可能です。 Nullable<T>を使用できるのは値の型のみです。

public struct Nullable<T> where T : struct

つまり、ジェネリックパラメーターの型が置換される場合は、値型でなければなりません。

0
Kapol

何もする必要はありません。modelbindingは問題なく変数にnullを渡します。

0
Renato Leite

参照型をNullableにすることはできません。 Nullable構造体で使用できるのは値型のみです。値型の名前に疑問符を追加すると、その値はNULL可能になります。これらの2行は同じです。

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