[解決済み] c# 7.0: System.Typeをオンにする
2023-07-19 23:21:22
質問
この質問に回答する既存の質問はありません。
c# 7では、私は直接切り替えることができます。
System.Type
?
試してみると
switch (Type)
{
case typeof(int):
break;
}
と表示されます。
typeof(int)
は定数表現である必要があります。
を避けることができる構文上の砂糖はありますか?
case nameof(int):
を避け、直接等しいかどうかを比較できるような構文上の工夫はありますか?
nameof(T)
というように、名前空間があるため、caseステートメントで完全に一致するわけではありません。したがって、名前の衝突はおそらく
int
には適用されないでしょうが、他の比較には適用されるでしょう。
つまり、これよりも型安全性を高めようとしているのです。
switch (Type.Name)
{
case nameof(Int32):
case nameof(Decimal):
this.value = Math.Max(Math.Min(0, Maximum), Minimum); // enforce minimum
break;
}
どのように解決するのですか?
(すでにリンクされている)新しいパターンマッチの機能で可能です。
通常、値で切り替えるのですが
switch (this.value) {
case int intValue:
this.value = Math.Max(Math.Min(intValue, Maximum), Minimum);
break;
case decimal decimalValue:
this.value = Math.Max(Math.Min(decimalValue, Maximum), Minimum);
break;
}
でも、型だけならスイッチを入れるのに使えます。
switch (type) {
case Type intType when intType == typeof(int):
case Type decimalType when decimalType == typeof(decimal):
this.value = Math.Max(Math.Min(this.value, Maximum), Minimum);
break;
}
これはこの機能が意図するところではなく、従来の
if
...
else if
...
else if
...
else
というチェーンがあり、伝統的なチェーンはいずれにせよコンパイルされるものです。私はこのようなパターンマッチの使用はお勧めしません。
関連
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] switch文の複数ケース
-
[解決済み] C#のSwitch文のフォールスルー?
-
[解決済み] スイッチオンタイプ」これ以上の代案はないのでしょうか?
-
[解決済み】ローカル関数とラムダ C# 7.0
-
[解決済み】インスタンス化されたSystem.Typeをジェネリッククラスの型パラメータとして渡す。
-
[解決済み] C#でSystem.TypeをGenericパラメータとして使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】パラメータ付きRedirectToAction