[解決済み】Nullable型をジェネリックパラメータにすることは可能か?
2022-03-25 06:52:37
質問
このようなことをしたいのですが.
myYear = record.GetValueOrNull<int?>("myYear"),
一般的なパラメータとして nullable 型があることに注意してください。
このため
GetValueOrNull
関数がnullを返す可能性があるため、最初に試したのはこのようなものでした。
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : class
{
object columnValue = reader[columnName];
if (!(columnValue is DBNull))
{
return (T)columnValue;
}
return null;
}
しかし、今出ているエラーは
型 'int?' は、汎用型またはメソッドのパラメータ 'T' として使用するには、参照型でなければなりません。
そうなんだ!
Nullable<int>
は
struct
! ということで、クラス制約を変更してみました。
struct
を返すことができません。
null
を追加しました。)
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
では、課題です。
myYear = record.GetValueOrNull<int?>("myYear");
以下のようなエラーが発生します。
型 'int?' を汎用型またはメソッドのパラメータ 'T' として使用するには、null 値でない型である必要があります。
ジェネリックパラメータにNullable型を指定することは全く不可能なのでしょうか?
どのように解決するのですか?
戻り値のタイプを
Nullable<T>
そして、NULLでないパラメータを持つメソッドを呼び出します。
static void Main(string[] args)
{
int? i = GetValueOrNull<int>(null, string.Empty);
}
public static Nullable<T> GetValueOrNull<T>(DbDataRecord reader, string columnName) where T : struct
{
object columnValue = reader[columnName];
if (!(columnValue is DBNull))
return (T)columnValue;
return null;
}
関連
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】文字列をパースしてNULL可能なint型にする方法
-
[解決済み】C#のジェネリック引数のNullまたはデフォルト比較
-
[解決済み] 汎用型またはメソッド 'System.Nullable<T>' のパラメータ T として使用するには、型 'string' が非 Nullable 型である必要があります。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] SQL データリーダー - Null カラム値の処理