あなたは1つのメトをしたい場合D、私はジェネリックを使用し、異なる種類の情報を返すために:
public static T GetInfo<T>(string name);
// This can be called as following:
string name = GetInfo<string>("name");
int salary = GetInfo<int>("salary");
一つの問題は、しかし、あります:私たちの方法は、任意の型を返すことができながらConsole.ReadLine
は、string
を返します。どのように文字列を 'ターゲット'型に変換できますか? T
をチェックして、サポートしたいすべてのタイプのカスタムロジックを書くことができますが、それは面倒で扱いにくいものです。
public static T GetInfo<T>(string name, Func<string, T> convert);
// This can be called as following:
string name = GetInfo<string>("name", s => s);
int salary = GetInfo<int>("salary", int.Parse);
今どのようにあなたがそのメソッドを実装します:より良い解決策は、発信者が特定の型に文字列を変換する方法を知っている小さな機能に渡すようにするのですか?
public static T GetInfo<T>(string name, Func<string, T> convert)
{
Console.WriteLine("Please enter " + name);
string input = Console.ReadLine();
return convert(input);
}
いくつかの注意事項:
- タイプのパラメータは、多くの場合、ちょうど
T
を命名しているが、私はそれが便利な彼らに、このようなTInfo
など、より説明的な名前を与えることを見つけます。
- コンパイラに型を推測するのに十分な情報があるため、
<string>
と<int>
部分は除外できます。
- 例を短く簡単にするためにエラー処理を残しました。プロダクションコードでは、無効な入力を処理する戦略を考え出すことになります。
したがって、メソッドで文字列またはintのいずれかを返すようにしますか? –
C#7 +タプルを使用する:https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/#user-content-tuples。 –
これはXYの問題を叫びます(あなたが意味するものがわからない場合は、Googleで、携帯では便利なリンクはありません)。あなたはこれで何を達成しようとしていますか? –