【问题标题】:Action<T> delegate in function signature parameter - unclear about type函数签名参数中的 Action<T> 委托 - 不清楚类型
【发布时间】:2016-12-07 16:27:51
【问题描述】:

我有一段使用 Renci.SshNet 包的 C# 代码。我正在上传一个文件,相关函数的签名如下:

public void UploadFile(Stream input, string path, Action<ulong> uploadCallback = null);

我这样称呼它(没关系):

Client.UploadFile(UploadStream, RemoteFile,
    uploadcallback =>
    {
        Logger.Info("Uploaded {0}", CurrentFile);
        ArchiveList.Add(CurrentFile);
    });

我不清楚的是为什么uploadCallback 参数是Action&lt;ulong&gt;。如果您在调用时放入 lambda 表达式,这正是您所需要的吗?

【问题讨论】:

  • 您没有调用此处显示的重载。
  • 在您的情况下,Client.UploadFile 是一个静态方法,并且 bool canOverride 字段似乎不在图片中,除非签名具有默认值
  • uploadcallback 是您传递给UploadFileAction&lt;ulong&gt; 的参数,因此类型为ulong,而不是Action&lt;ulong&gt;。您也没有在示例中传递 canOverride 参数。
  • @Zinov 它是 Renci.SshNet.SftpClient 的一个实例。
  • 抱歉,我的方法签名有误,已修复。

标签: c# function lambda functional-programming


【解决方案1】:

我从一个示例中复制了匿名函数,但是正确调用它可以清楚地知道发生了什么。

不是:

Client.UploadFile(UploadStream, RemoteFile,
    uploadcallback =>
    {
        Logger.Info("Uploaded {0}", CurrentFile);
        ArchiveList.Add(CurrentFile);
    });

但是:

 Client.UploadFile(UploadStream, RemoteFile,
    (ulong u) => 
    {
        Logger.Info("Uploaded {0}, {1} bytes.", CurrentFile, u.ToString());
            ArchiveList.Add(CurrentFile);
    });

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2011-01-17
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多