Параметр типа «T» имеет то же имя, что и параметр типа из внешнего типа «…»

public abstract class EntityBase { ... }

public interface IFoobar
{
    void Foo<T>(int x)
        where T : EntityBase, new();
}

public interface IFoobar<T>
    where T : EntityBase, new()
{
    void Foo(int x);
}

public class Foobar<T> : IFoobar, IFoobar<T>
    where T : EntityBase, new()
{
    public void Foo(int x) { ... }

    void IFoobar.Foo<T>(int x) { Foo(x); }
}

Я получаю предупреждение компилятора: Параметр типа «T» имеет то же имя, что и параметр типа из внешнего типа «...»

Я пробовал делать: void IFoobar.Foo (int x) {Foo (x); } , однако тогда я не могу гарантировать, что U и T одинаковы. Способ реализации класса Foobar, очень важно, чтобы они были одинаковыми.

Я также пробовал сделать: void IFoobar.Foo (int x) where U: T {Foo (x) ; } , однако это не гарантирует, что U и T равны, и не позволяет мне переопределить ограничение, поскольку оно было определено в интерфейсе.

16
задан michael 18 July 2011 в 13:27
поделиться