Tôi cần viết hàm đại biểu có thể 'quấn' một số trong khi/try/catch code xung quanh cuộc gọi UDP cơ bản để xác minh liên kết. Tôi đã làm cho nó làm việc cho Func cho một chức năng mà không có đối số, nhưng tôi không thể làm cho nó làm việc cho hành động, trong đó có một đối số (nhưng không trở lại). Tôi dường như không thể vượt qua trong các đối số một cách hợp lý mà không có trình biên dịch phàn nàn.Sử dụng Action <T> làm đối số trong C# (bắt chước một con trỏ hàm)
Tôi có hoàn toàn sai về điều này không? Tôi mới đến C# và tôi chủ yếu cố gắng bắt chước ý tưởng của một con trỏ hàm. Tôi có nên không quá tải chức năng này không? Tôi biết bạn không thể quá tải đại biểu (tôi giả định đó là lý do tại sao Func và hành động tồn tại).
này hoạt động:
protected TResult udpCommand<TResult>(Func<TResult> command)
{
TResult retValue = default(TResult);
while (!linkDownFail)
{
try
{
retValue = command();
break;
}
catch
{
LinkStateCallBack(ip, getLinkStatus());
if (linkDownFail) throw new LinkDownException();
Thread.Sleep(100);
}
}
return retValue;
}
Nhưng điều này không:
protected void udpCommand<T>(Action<T> command(T value))
{
while(!linkDownFail)
{
try
{
command(value);
break;
}
catch
{
LinkStateCallBack(ip, getLinkStatus());
if (linkDownFail) throw new LinkDownException();
Thread.Sleep(100);
}
}
return;
}
Calling ước (đối với một trong những hoạt động):
udpCommand<uint>(someUdpCommand);
Bổ sung - bạn không thực sự cần T; bạn chỉ có thể thực hiện 'Action' (no arg), và gọi là: udpCommand (() => SomeMethod (123)); –
Điều này có cho phép tôi có một số thông số đầu vào khác nhau để udpCommand mà không làm quá tải thông số cho tối đa 4 tham số không? Đó là những gì tôi cần làm. Tôi vẫn cần một Func và một hành động? – cgyDeveloper