다음과 같은 방법이 있습니다.
public delegate void SubscriberAction(string a, string b = null);
내 방법
public void Subscribe(SubscriberAction action)
{
var consumer = new EventingBasicConsumer(Channel);
consumer.Received += (model, eventArgs) =>
{
try
{
var body = eventArgs.Body;
action?.Invoke(Encoding.UTF8.GetString(body), eventArgs.RoutingKey);
// The above works when I call it with one or two strings
}
finally
{
Channel.BasicAck(eventArgs.DeliveryTag, false);
}
};
Channel.BasicConsume(Configuration.QueueName, false, consumer);
}
위에 표시된대로이 작업을 호출하면 선택적 매개 변수를 인식하고 의도 한대로 호출 할 수 있습니다. 그러나이 Subscribe
대리자 매개 변수를 사용 하는 메서드를 사용하면 원하는 방식으로 호출 할 수 없습니다.
따라서 이것은 작동하지 않습니다.
subscriber.Subscribe(x =>
{
// do stuff
});
내가 이것을 할 때만 작동
subscriber.Subscribe((x, y) =>
{
// do stuff
});
처음에는 Action<string> action
매개 변수 로 사용 Subscribe
했지만 선택적 두 번째 문자열 매개 변수를 추가해야했으며 Action은 선택적 매개 변수를 허용하지 않기 때문에 (틀린 경우 수정) 위에서 한 것처럼 사용자 지정 대리자를 사용하라는 대답을 찾았습니다. .
Subscribe
하나 또는 두 개의 매개 변수로 메소드를 호출하려면 어떻게 해야합니까?
Action<String, String>
anothet Subscribe
방법으로 돌아가서 추가 :
public void Subscribe(Action<string> action) => Subscribe((x, y) => action(x));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다