【问题标题】:Understanding a line of example-code理解一行示例代码
【发布时间】:2011-09-05 14:21:07
【问题描述】:

我正在尝试修改this example 以满足我的需要,但特别是一行让我很难过。聊天服务器中的((Action<List<MessageInfo>>)parm)(msgs); 行对我来说完全没有意义。我可以看到它将类型转换(msgs)转换为类型((Action<List<MessageInfo>>)parm);,但它似乎根本没有做任何事情。

我希望有人能帮助我理解这一点,因为我有一种感觉,这是我在这个谜题中遗漏的最后一部分......

亲切的问候。

【问题讨论】:

    标签: c# asp.net-mvc-3 comet long-polling


    【解决方案1】:

    他们正在投射delegate,然后用msgs 调用它。

    这一点:

    ((Action<List<MessageInfo>>)parm);
    

    投射委托。然后它使用msgs 调用委托。

    稍微分解一下:

    Action<List<MessageInfo>> del = ((Action<List<MessageInfo>>)parm);
    del(msgs);
    

    作者只是选择将所有内容折叠成一行。

    【讨论】:

    • 谢谢,这解释了很多。当旧人以新方式“作弊”时,成为新人并不容易;)
    【解决方案2】:

    线

    ((Action<List<MessageInfo>>)parm)(msgs)
    

    不是简单的强制转换,它是一个强制转换,然后是方法的调用。基本上它是这样做的:

    Action<List<MessageInfo>> action = (Action<List<MessageInfo>>)parm;
    action(msgs);
    

    【讨论】:

      【解决方案3】:

      他们说的是:

      考虑一下:

      parm 是一个Action

      List&lt;MessageInfo&gt;s 作为参数

      因为Actions 是可执行的,所以执行它,

      msgs 作为参数传递。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-24
        • 1970-01-01
        • 2022-10-23
        • 2016-09-13
        • 1970-01-01
        相关资源
        最近更新 更多