[解決済み】オブジェクトがnullableかどうかを確認する方法は?
2022-04-06 07:57:53
質問
与えられたオブジェクトがnullableであるかどうかを確認するにはどうしたらよいでしょうか。言い換えれば、次のメソッドを実装するにはどうしたらよいでしょうか。
bool IsNullableValueType(object o)
{
...
}
nullable を探しています。 の値の種類を指定します。 参照型を意識したわけではありません。
//Note: This is just a sample. The code has been simplified
//to fit in a post.
public class BoolContainer
{
bool? myBool = true;
}
var bc = new BoolContainer();
const BindingFlags bindingFlags = BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
;
object obj;
object o = (object)bc;
foreach (var fieldInfo in o.GetType().GetFields(bindingFlags))
{
obj = (object)fieldInfo.GetValue(o);
}
obj
型のオブジェクトを参照するようになりました。
bool
(
System.Boolean
と同じ値を持つ)
true
. 私が本当に欲しかったのは、型
Nullable<bool>
そこで、回避策として、oがnullableかどうかをチェックし、objの周りにnullableラッパーを作成することにしました。
解決方法は?
nullable - には2つのタイプがあります。
Nullable<T>
と参照型があります。
Jonから、ボックス型だと型が取りにくいけど、ジェネリックスだと取れるよと訂正がありました。
- ということで、以下はいかがでしょうか。これは実際に型をテストしているところです
T
を使用していますが
obj
パラメータは純粋に一般的な型推論を行うため(呼び出しやすくするため)です。
obj
パラメータを使用します。
static bool IsNullable<T>(T obj)
{
if (obj == null) return true; // obvious
Type type = typeof(T);
if (!type.IsValueType) return true; // ref-type
if (Nullable.GetUnderlyingType(type) != null) return true; // Nullable<T>
return false; // value-type
}
しかし、すでにオブジェクト変数に値をボックス化している場合、これはあまりうまくいきません。
マイクロソフトのドキュメントです。 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/how-to-identify-a-nullable-type
関連
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Nullable<T>.HasValueとNullable<T> != nullの違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】型がNullableかどうかを確認する正しい方法【重複あり