如何使用Func <string,t =“”>作为参数之一调用方法

时间:2017-12-03 14:41:10

标签: c#

我有一个类public class RemoteData { public RemoteData(string Message, string IP) { this.IP = IP; this.Message = Message; } public string IP; public string Message; } ,如下所示,

IObservable<T>

现在我有一个UdpStream方法 public static IObservable<RemoteData> UdpStream(IPEndPoint endpoint, Func<string, RemoteData> processor) { return Observable.Using(() => new UdpClient(endpoint), udpClient => Observable.Defer(() => udpClient.ReceiveAsync().ToObservable()).Repeat().Select(result => processor(Encoding.UTF8.GetString(result.Buffer)))); } ,如下所示,

UdpStream

现在如何调用Func,如何传递var stream = UdpStream(new IPEndPoint(IPAddress.Any, 514), 2nd Param); 参数?

async/await

1 个答案:

答案 0 :(得分:2)

Func<T, U>代表一个代理,它接受T参数并返回U。您可以使用与该签名匹配的方法引用或使用lambda expression初始化Func<T, U>

使用Func<,>作为参数是回调的常用习惯用法。例如,如果您有类似的方法:

public static void Method(Func<T, U> func)
{
     // ...
}

我们可以预期Method将调用您在func参数中传递的内容。事实上,这发生在你现在的代码中(参数Func<string, RemoteData> processor被称为processor(Encoding.UTF8.GetString(result.Buffer)))。

现在,您拥有Func<string, RemoteData>,因此您需要一个采用string并返回RemoteData的方法。例如:

public static RemoteData Example(string input)
{
    // ...
}

// ...

var observable = UdpStream(endpoint, Example);