2016-12-27 3 views
1

Я пытаюсь вернуть строку из выражения лямбда. Это выражение может распечатать полученные строки с помощью строки, но я не могу понять, как вернуть строку из этой функции, чтобы я мог использовать ее во всем моем проекте.Метод возвращаемой строки, который содержит выражение лямбда

Благодаря

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   
     } 
    } 
} 

ответ

2

Вы можете хранить его в локальной переменной и использовать выражение многострочного лямбда, как это:

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; 
} 
+1

Я также хотел бы отметить, что метод плохо назван: 'messaging_server'. Это не соответствует принятому соглашению об именах для методов, которые представляют собой случай Паскаля или верхний случай верблюда. –

+0

И не подчеркивает. И не должно быть существительным. – eurotrash

+0

@eurotrash - Случай Паскаля не подразумевает подчеркивания. –

0

Если я правильно понял, может быть, вы можете попробовать, как это:

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.

+0

Множественные вхождения 'Encoding.UTF8.GetString (e.Message)' не DRY. –

+0

@ rory.ap Вы правы. Я применил ваше предложение. Это было просто – kat1330

+0

Почему он никогда не запустится? В моем локальном режиме он работает правильно. – kat1330

Смежные вопросы