0

Func<T, string>変換したいものがありFunc<dynamic, string>ます。出来ますか?

4

2 に答える 2

6

どうぞ。動的な値がタイプでない場合に何をしたいかを決める必要がありますT

public Func<dynamic, string> ConvertToDynamicFunc<T>(Func<T, string> typedFunc)
{
    Func<dynamic, string> dynamicFunc = (input) =>
    {
        if (input is T)
            return typedFunc((T)input);

        return null; //or throw?
    };

    return dynamicFunc;
}

Func<int, string> typedFunc = (input) => input.ToString();
Func<dynamic, string> dynamicFunc = ConvertToDynamicFunc(typedFunc);
System.Console.WriteLine(dynamicFunc(10));//outputs "10";
System.Console.WriteLine(dynamicFunc(10.5));//outputs null since a double isn't an int (type T) or throw if you prefer;
于 2012-06-19T14:23:58.297 に答える
4

もちろん:

Func<T, string> input = ...
Func<dynamic, string> output = x => input(x);

もちろん、互換性のないタイプでデリゲートを実行すると、が得られますRuntimeBinderException

于 2012-06-19T14:22:42.133 に答える