【问题标题】:Return string method that contains a lambda expression返回包含 lambda 表达式的字符串方法
【发布时间】:2017-05-12 03:29:51
【问题描述】:

我正在尝试从 lambda 表达式返回一个字符串。这个表达式可以用 writeline 打印出接收到的字符串,但我不知道如何从函数中返回字符串,所以我可以在我的项目中使用它。

谢谢

public static async Task<string> messaging_server() 
{
    using (var messagebus1 = new TinyMessageBus("ExampleChannel"))
    {
        messagebus1.MessageReceived +=
        (sender, e) => Debug.writeLine(Encoding.UTF8.GetString(e.Message));

        while (true)
        {
             #infinite loop        
        }
    }
}

【问题讨论】:

    标签: c# string lambda return


    【解决方案1】:

    您可以将其存储在局部变量中并使用多行 lambda 表达式,如下所示:

    public static async Task<string> messaging_server() 
    {
        string ret;
    
        using (var messagebus1 = new TinyMessageBus("ExampleChannel"))  
        {
    
            messagebus1.MessageReceived += (sender, e) => 
            {
                ret = Encoding.UTF8.GetString(e.Message);
                Debug.writeLine(ret);
            };
    
            while (true)
            {
                //#infinite loop        
            }
    
        }  
    
        return ret;
    } 
    

    【讨论】:

    • 我还想指出该方法的名称很糟糕:messaging_server。这不符合公认的方法命名约定,即 Pascal 大小写或大驼峰大小写。
    • 而且没有下划线。而且不应该是名词。
    • @eurotrash -- 帕斯卡大小写意味着没有下划线。
    【解决方案2】:

    如果我理解正确,也许你可以这样尝试:

        public static async Task<string> messaging_server() {
        using (var messagebus1 = new TinyMessageBus("ExampleChannel"))
    
        {
    
            messagebus1.MessageReceived +=
            (sender, e) => 
            { 
                var encodedMessage = Encoding.UTF8.GetString(e.Message);
                Debug.WriteLine(encodedMessage);
                return encodedMessage;
            } 
    
    
            while (true)
            {
                #infinite loop        
            }
        }
    
    }
    

    请注意我是如何包装 Debug.WriteLine(Encoding.UTF8.GetString(e.Message)); 的。它将打印并返回编码的e.Message

    【讨论】:

    • Encoding.UTF8.GetString(e.Message) 多次出现不是 DRY。
    • @rory.ap 你是对的。我采纳了你的建议。只是
    • 为什么它永远不会运行?在我的本地它运行正常。
    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 2011-06-27
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多