0

組み込みデータ型とユーザー定義データ型の主な違いは次のとおりです。組み込みデータ型はリテラル値を受け入れることができます (コードに直接挿入される値。このプロセスはハードコーディングとも呼ばれます)。

したがって、3つの値を受け入れるブール値と同じカスタムデータ型を作成することは可能ですか: yes/no/maybe WITHOUT USING enums.

次のコードのように:

MyCustomBoolean a = maybe;

上記の質問をしたのは、C# の組み込みデータ型がコア言語 (C++ int、char... など) で指示されていることを理解したいからですか?

- -アップデート - -

2 番目の質問については、2 番目の質問をより明確にするために質問させてください。

たとえば、文字列は System.String のエイリアスですが、C# の純粋な文字列は System.String なしで機能しますか?

4

3 に答える 3

2

あなたが要求したとおりにこれを行う方法はありません。ただし、この結果 (名前付きの値) を達成できる定数フィールドを C# で作成できますが、整数型または文字列のみを使用できます。つまり、コンパイル時の定数に既に使用できるものです。これは、それ以外のMagic Valuesに特に役立ちます。

public const string Maybe = "Maybe";
public const int Maybe = 0;

これを回避する 1 つの方法は、実際の定数としては使用できませんが、読み取り専用の静的フィールドまたはプロパティを初期化することです。例えば

public static readonly MyCustomBoolean Maybe { get { return new MycustomBoolean(); } }
public static MyCustomBoolean Maybe = new MyCustomBoolean();
于 2014-09-23T18:32:41.183 に答える
0

この特定のケースでは、代わりに null 許容の bool を使用できます。次のような典型的な操作で:

bool? b = null
if (b.HasValue)
if (b.Value)
b = true

可能性が null になる場所、またはHasValue == false.

于 2014-09-23T18:32:32.300 に答える
0

リテラルは C# 言語の機能です。新しいリテラルを作成することはできません。

次の XML リテラルのようなユーザー定義リテラルを作成できる Nemerle などの別のプログラミング言語に興味があるかもしれません: https://github.com/rsdn/nemerle/wiki/XML-literals

列挙型と定数は通常、C# の空白を埋めます。より複雑な構造の場合、流暢な API が使用されていることがよくあります。

もちろん、C# にこの機能がないことは、クエリを定義する自然な方法を提供するために、LINQ をサポートするために C# 言語仕様を変更する必要があることを意味していることがわかります。C# に Nemerle と同様のメタ プログラミング機能があれば、言語構文を変更せずに LINQ と同じ目標を達成できたはずです。

于 2014-09-23T18:33:47.860 に答える