コードは次のとおりです。
public void DoSomething<T>(string key, Action<T> callback)
{
Type typeParameterType = typeof(T);
if (typeParameterType.Equals(typeof(string)))
{
callback("my string response");
}
if (typeParameterType.Equals(typeof(int)))
{
callback(1); // my int response
}
// etc...
}
ただし、エラーが発生しています... C# のジェネリックとデリゲートはすべて初めてです。
私が得ているエラーは、
Error 1 Delegate 'System.Action<T>' has some invalid arguments
Error 2 Argument 1: cannot convert from 'string' to 'T'
私にとっては、簡単で慣用的な美しく便利なメソッドを作成することが重要です。
上記の例を次のように実装したいと思います。
int total = 0;
DoSomething<int>("doesn't matter", x => {
total = 10 + x; // i can do this because x is an INT!!! (:
});
string message = "This message is almost ";
DoSomething<int>("doesn't matter", x => {
message = "finished!!!"; // i can do this because x is an STRING!!! (:
});
しかし、私は立ち往生しています...助けてください!
================================================== =============================
dasblinkenlight が指摘したように、
オーバーロードは、最もクリーンでコンパイラーに優しいアプローチです...私のAPIは現在、
DoSomething("doesn't matter", new Action<string>(x => {
message = "finished!!!"; // i can do this because x is an STRING!!! (:
}));
これは支払う費用が少なく、理解しやすいものです。
回答ありがとうございます (:
================================================== =============================
さらに調査を行うと、次のことを行うことで実際にクリーンアップできます。
DoSomething("doesn't matter", (string x) => {
message = "finished!!!"; // i can do this because x is an STRING!!! (:
});
これに注意してください: (string x)
これで、コンパイラーは認識します! とてもクールでしょ?