Добрый день,
Я довольно долго искал в Google и stackoverflow, но пока не получил ответа. (По крайней мере, не тот ответ, который мне хотелось бы :))
Итак, вот краткий пример моего базового кода:
public interface IITem<IdType>
{
IdType Id { get; set; }
}
public class Item<IdType> : IITem<IdType>
{
public IdType Id { get; set; }
}
public class MyItem : Item<Guid>
{
}
Теперь я хотел бы создать универсальный метод получения идентификаторов, что-то вроде этого:
private static TId GetId<TItem, TId>(TItem e) where TItem : IITem<TId>
{
return e.Id;
}
Пока это хорошо, но теперь, когда я хочу использовать его, как в следующем примере, я получаю ошибку, упомянутую в заголовке:
var item = new MyItem()
{
Id = Guid.NewGuid()
};
var id = GetId(item);
Это работает, когда я явно говорю все типы для него так:
var id = GetId<MyItem, Guid>(item);
Но я не хочу называть свой элемент, и тем более тип идентификатора (который определен внутри MyItem и не виден непосредственно в области использования GetId ()), который может быть совершенно другим для некоторых объектов.
Есть ли какое-нибудь исправление синтаксиса, которое я мог бы сделать, чтобы я мог заставить этот GetId () работать без подсказок каких-либо типов для него?
Спасибо!