問題の紹介
値型の変換(値変換)のような単純なトピックは、記事全体としては価値がないように思われます。 C#には適切な演算子「(T)値」があり、それを実装する型があり、このトピックは閉じていると見なすことができます。 しかし、.NETの14年間で、BCL開発者や他のプログラマーは、値の型を変換するための4つの方法を思い付きました。
それらのリストは次のとおりです。
- System.Convertクラス 。
- IConvertibleインターフェイス 。
- System.ComponentModel.TypeConverter ;
- To、From、Parse、Createメソッド。
これに加えて、メタタイプNullable [T] System.Enumがあり 、値タイプを変換する独自のメソッドがあります。
開発者がこの変換の可能性をどのように認識したかを考えずに、このようなさまざまなメソッドすべてにA→Bを変換する便利なAPIが1つもありませんでした。
解決策
System名前空間のTypeConvertクラス(はい、他の人の名前空間の目詰まりが悪いことを知っています)。
ToType Convert<FromType, ToType>(FromType value, string format, IFormatProvider formatProvider)
オプションでformatおよびformatProviderの書式設定を使用して、値の型をFromTypeからToTypeに変換します。 フォーマット設定を受け入れる適切なメソッドがない場合、フォーマットなしのオプションが呼び出されます。
READMEファイルには、他の方法の説明が含まれています。
設置
これらはすべて1つのファイルにあります。このファイルは 、プロジェクトと便利なNugetパッケージに保存できます。
Install-Package TypeConvert
Nugetパッケージのロードには2つのクラスがあります。
TypeActivator-キャッシュされたコンストラクターを介して型インスタンスを作成し、
HexConvert-バイト/数字を16進表現に変換し、その逆を行います。
申込み
不明なタイプのパラメーターを既知のメソッドパラメーターにバインドするためのConsoleApp.CommandLineプロジェクト。
プライベートプロジェクトで、JSONから派生した構成値を特定の複合型(Uri、IpAddress、TimeSpanなど)に変換します。
参照資料
» githubでのプロジェクト