[解決済み] 文字列をNULL可能な型に変換する(int, double, etc...)
2022-05-10 06:14:37
質問
データ変換を行おうとしています。残念ながら、データの多くは文字列で、intやdoubleなどであるべきなのですが...。
というわけで、私が手に入れたのは次のようなものです。
double? amount = Convert.ToDouble(strAmount);
この方法の問題は、strAmountが空の場合、もしそれが空であれば、私はそれをnullになるように量りたいので、私がそれをデータベースに追加するとき、カラムはnullになります。そこで、結局こう書くことにしました。
double? amount = null;
if(strAmount.Trim().Length>0)
{
amount = Convert.ToDouble(strAmount);
}
これでうまくいくのですが、1行だったコードが5行になってしまいました。このため、特に変換する列が大量にある場合は、少し読みづらくなっています。
文字列クラスとジェネリックの拡張を使用して型を渡そうと思いました。そこで、これを試してみました。
public static class GenericExtension
{
public static Nullable<T> ConvertToNullable<T>(this string s, T type) where T: struct
{
if (s.Trim().Length > 0)
{
return (Nullable<T>)s;
}
return null;
}
}
でも、エラーが出ます。Cannot convert type 'string' to 'T?'.
これを回避する方法はあるのでしょうか?ジェネリックスを使ったメソッドの作成にはあまり慣れていません。
どのように解決するのですか?
もう一つ気をつけなければならないのは、文字列自体がNULLである可能性があるということです。
public static Nullable<T> ToNullable<T>(this string s) where T: struct
{
Nullable<T> result = new Nullable<T>();
try
{
if (!string.IsNullOrEmpty(s) && s.Trim().Length > 0)
{
TypeConverter conv = TypeDescriptor.GetConverter(typeof(T));
result = (T)conv.ConvertFrom(s);
}
}
catch { }
return result;
}
関連
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] UTF-8 byte[]を文字列に変換する方法
-
[解決済み] intからStringへの変換方法を教えてください。
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み】Nullable型をジェネリックパラメータにすることは可能か?
-
[解決済み】StringをIntに変換する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】一般的な TryParse