代码之家  ›  专栏  ›  技术社区  ›  Galina Melnik

Func<TResult>和Func<T,TResult>在方法签名中是否有1个名称?

  •  -1
  • Galina Melnik  · 技术社区  · 9 年前

    我有两种方法:

    private static async Task<T> GetInfoAsync<T>(MyClient service, Func<Task<T>> funcAsync, string resultText)
        {
            var result = default(T);
    
            if (service != null) {
                try {
                    service.Open();
                    result = await funcAsync();
                    service.Close();
                    Console.WriteLine(resultText);
                } catch (Exception ex) {
                    service.Abort();
                }
            }
            return result;
        }
    
        private static async Task<T> GetInfoAsync<T>(MyClient service, Func<string,Task<T>> funcAsync, string resultText, string param)
        {
            var result=default(T);
    
            if (service != null) {
                try {
                    service.Open();
                    result = await funcAsync(param);
                    service.Close();
                    Console.WriteLine(resultText);
                } catch (Exception ex) {
                    service.Abort();
                }
            }
            return result;
        }
    

    是否可以为两个函数创建一个方法? 类似于 “私有静态异步任务GetInfoAsync(MyClient服务,Something??,string resultText,string param)”

    1 回复  |  直到 9 年前
        1
  •  1
  •   xanatos    9 年前

    不,但一般来说,您可以执行部分函数(例如,请参见 http://blogs.msdn.com/b/wesdyer/archive/2007/01/29/currying-and-partial-function-application.aspx )如果给定一个带有参数的函数,则使用该参数的固定值调用该函数。

    // The original function
    Func<string, Task<T>> fullFunction = x => ...;
    
    // The partial function
    string param = "...";
    Func<Task<T>> partialFunction = () => fullFunction(param);
    

    所以它会是 GetInfoAsync 需要创建此 partialFunction 并将其传递给 获取信息异步 .