web-dev-qa-db-ja.com

C#でnull不可の型を作成する

C#でint、boolなどのnullを許容しない値の型を作成するにはどうすればよいですか?

48
Navid Rahmani

はい、これらはstructと呼ばれます。

構造体は、intboolなどと同様に値型です。

彼らはそれらに関連するいくつかのルール/推奨事項を持っています:(私はこれらが最も重要だと思います)

  • 構造体は、refまたはoutキーワードを使用しない場合、値によって渡され、割り当てられます...これは、構造体に配置したすべてのものが、メソッドに割り当てまたは渡すときにコピーされることを意味します。そのため、大きな構造体を作成しないでください。

  • c#では、構造体にパラメーターのないコンストラクターを定義することはできません

  • 構造体は不変であり、プロパティセッターを持たない方が適しています。変更可能な構造体を作成することで、実際の問題に陥ることがあります。

その他のルールは、構造体に関するMicrosoftドキュメント内にあります。

null不可の参照型 ...と同様、これは不可能です。コード内のnullを手動で確認する必要があります。

53
Miguel Angelo

struct を定義できます:

構造体タイプは、長方形の座標や在庫のアイテムの特性など、関連する変数の小さなグループをカプセル化するために通常使用される値タイプです。次の例は、単純な構造体宣言を示しています。

public struct Book
{
    public decimal price;
    public string title;
    public string author;
}

ただし、System.Int32に対してintのようなエイリアスを定義することはできず、フルネームMyNamespace.Book(またはusing MyNamespace;付きのBook)で参照する必要があります。あなたの構造。

12
dtb

7年後、これは今可能です

  • C#8を含む.NET Core 3.0をインストールします。
  • 言語バージョンを8.0に設定します。8.0を.csprojファイルに設定します。
  • プロパティを追加します(.to your csproj)

彼のこれに関する詳細は、コードと既存のコードの作成に影響します:

https://praeclarum.org/2018/12/17/nullable-reference-types.html

11
Brian Rosamilia