我有一个类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
答案 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);