Я всегда был под впечатлением, что C# компилятор может сделать вывод Params типа в тех случаях, как следующие:C# 5.0 Обобщения: парам типа умозаключение
class Program
{
static void Main(string[] args)
{
IMessageBus messageBus = null;
//Here the compiler nags "type params for Publish cannot be inferred from the usage.. .."
messageBus.Publish(new CorrectorAdded(10));
}
}
public interface IEvent<out TPayload>
{
TPayload Payload { get; }
}
public abstract class EventBase<TPayload> : IEvent<TPayload>
{
public TPayload Payload { get; private set; }
protected EventBase(TPayload payload)
{
Payload = payload;
}
}
public interface IMessageBus
{
void Publish<TEvent, TPayload>(TEvent @event) where TEvent : IEvent<TPayload>;
IDisposable Subscribe<TEvent, TPayload>(Action<TPayload> listener) where TEvent : IEvent<TPayload>;
}
public class CorrectorAdded : EventBase<CorrectorAddedArgs>
{
public CorrectorAdded(CorrectorAddedArgs payload) : base(payload)
{
}
public CorrectorAdded(int correctorId) : this(new CorrectorAddedArgs(correctorId))
{
}
}
public class CorrectorAddedArgs
{
public int CorrectorId { get; private set; }
public CorrectorAddedArgs(int correctorId)
{
CorrectorId = correctorId;
}
}
Любые идеи о том, почему это происходит и как получить вывод типа для работы в этом случае?
Спасибо.
Возможный дубликат http://stackoverflow.com/questions/6630690/wh y-cant-nested-generic-types-be-inferred (не тот же самый вопрос, но ответ Эрика Липперта также относится к вашему вопросу). – haim770