[解決済み] 汎用型が文字列かどうかをテストする最良の方法?(C#)
2022-12-02 16:22:29
質問
プリミティブであろうとなかろうと、あらゆる型を許容するジェネリッククラスがあります。これに関する唯一の問題は
default(T)
. 値型や文字列に対して default を呼び出すと、妥当な値(例えば空文字列)に初期化されます。を呼び出すと
default(T)
を呼び出すと、NULLを返します。様々な理由から、プリミティブ型でない場合は、その型のデフォルトのインスタンスを確保する必要があります。
ではなく
null を返します。以下は試み1です。
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
問題点 - 文字列は値型ではありませんが、パラメータレスコンストラクタを持ちません。そこで、現在の解決策としては
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
しかし、これでは手抜きのような気がします。文字列のケースを処理するもっといい方法はないでしょうか?
どのように解決するのですか?
default(string)はstring.Emptyではなく、nullであることに留意してください。あなたのコードでは、特別なケースが必要かもしれません。
if (typeof(T) == typeof(String)) return (T)(object)String.Empty;
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】C#のジェネリック引数の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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#