私は.NET用のHTTP-APIラッパーを構築しています。これには、オブジェクトにデータを設定するためのメソッドがたくさんあり、データをシリアル化してサーバーに送信します。6 つのデータ型が許可されています。
- ストリング
- 整数
- 長いです
- 浮く
- ダブル
- 日付時刻
私のデータ属性はジェネリックを使用しています:
SetAttribute<T>(string key, T value)
したがって、データを設定する一般的な方法は 1 つだけです。データ型を前述の 6 つに制限することはできないため、ランタイム チェックを使用し、間違ったデータ型が使用されている場合は例外をスローします。
ここで私の問題: SetAttribute の 2 つのバージョンがあります。1 つは (T 型の) 単一の値を取り、もう 1 つは (IEnumerable<T> 型の) 複数の値を取ります。問題は、プログラマーがこのラッパーを使用し、型パラメーターを指定しない場合、ランタイムが使用するメソッドを推測することです。たとえば、次のようになります。
SetAttribute("testkey","thing,anotherthing,athirdthing".Split(','))
これはデフォルトで単一値メソッドになり、T は String[] です。もちろん、String[] は有効な型ではないため、メソッドは例外をキャストします。指定する場合:
SetAttribute<string>("testkey","thing,anotherThing,aThirdThing".Split(','))
ランタイムは正しいメソッド (複数値) を選択し、T は文字列であるため、例外はキャストされません。
私の質問: 型パラメーターが必須であり、明示的に定義する必要があるように、メソッドにラベルを付けるにはどうすればよいですか? または、実行時にこれを検出して、自分でマルチメソッドにリダイレクトする必要がありますか?