У меня есть Address
класс:Почему этот общий метод не совпадает?
public class Address
{
//Some stuff
}
и есть соответствующий *Wrapper
класс для обеспечения соблюдения определенных правил о том, как использовать Address
класс:
public class AddressWrapper : IWrapped<Address>
{
private Address _wrapped;
public Address GetWrapped()
{
return _wrapped;
}
//And some more
}
где IWrapped
определяется как:
public interface IWrapped<T>
{
T GetWrapped();
}
У меня есть следующее поколение IC класса для сохранения этих объектов (есть и другие объекты, которые следуют этой модели Entity
и EntityWrapper
):
public class GenericRepository
{
private GenericRepository() { }
public static void Add<T>(IWrapped<T> entity)
{
//Do something
}
public static void AddList<T>(IList<IWrapped<T>> entities)
{
//Do something
}
}
и у меня есть тестовый код:
[Test]
public void UseGenericRepository()
{
AddressWrapper addrW = new AddressWrapper();
addrW.AddrLine1 = "x";
addrW.AddrLine2 = "y";
addrW.AddrLine3 = "z";
addrW.City = "Starling City";
//This works as expected
GenericRepository.Add<Address>(addrW);
IList<AddressWrapper> addrList = new List<AddressWrapper>();
//Fill up the addrList
//This gives error: best overloaded method match has some invalid
//arguments
GenericRepository.AddList<Address>(addrList);
}
AddressWrapped
имеет тип IWrapped<Address>
(т.е. , он ее реализует) и Address
- это параметр типа, присвоенный методу AddList
, поэтому типы должны выстраиваться в линию. Я знаю, что это связано с моим ограниченным знанием C# дженериков (знакомых с генериками Java), но не могу понять, что здесь не так --- должно работа.
Это, вероятно, не имеет никакого значения, но вот мой конфиг:
- NHibernate 4.x
- .NET Framework (4,5)
Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
@JohnSaunders Спасибо за редактирование и ссылку. – markvgti
[DotNetFiddle] (https://dotnetfiddle.net/farucU), показывающий проблему. – Sayse