個人のミドルネームをオプションにします。私は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; }
}
文字列は参照型であり、常にnull可能です。特別なことをする必要はありません。型がNULL可能であることを指定する必要があるのは、値の型の場合のみです。
System.Stringは参照型なので、次のようなことをする必要はありません。
Nullable<string>
すでにnull値(null参照)があります:
string x = null; // No problems here
いずれにしても、文字列は参照型であるため、C#ではNULL可能です。 public string CMName { get; set; }
を使用するだけで、nullに設定できます。
他の人が指摘しているように、C#では文字列は常にnull可能です。ミドルネームをnullまたは空白のままにできないので、質問しているのではないかと思います。問題は検証属性、おそらくRegExにあると思われます。私は頭の中で正規表現を完全に解析することはできませんが、私は思考正規表現が存在する最初の文字を主張しています。私は間違っている可能性があります-RegExは難しいです。いずれにせよ、検証属性をコメントアウトして、それが機能するかどうかを確認し、一度に1つずつ追加し直してください。
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の この素敵な記事 を見ることができます。
string
タイプは参照タイプであるため、デフォルトではNULL可能です。 Nullable<T>
を使用できるのは値の型のみです。
public struct Nullable<T> where T : struct
つまり、ジェネリックパラメーターの型が置換される場合は、値型でなければなりません。
何もする必要はありません。modelbindingは問題なく変数にnullを渡します。
参照型をNullableにすることはできません。 Nullable構造体で使用できるのは値型のみです。値型の名前に疑問符を追加すると、その値はNULL可能になります。これらの2行は同じです。
int? a = null;
Nullable<int> a = null;