У меня есть интерфейс, IDetail
и класс Detail
, который реализует только IDetail
. В классе Detail
реализованное свойство ObjectId
установлено в значение. Как в интерфейсе, так и в классе, свойство реализуется как простой get
/set
. Однако при доступе через интерфейс свойство возвращает null
. Объект Detail фактически передается как общий аргумент, где T
- IDetail
. Это какая-то ошибка в .NET? Куда я начну пытаться понять это?Установленное свойство интерфейса, возвращающее значение null?
Это то, что показывает немедленное окно:
(detail as IDetail).ObjectId
null
(detail as Detail).ObjectId
"..."
Вот код:
public interface IDetail
{
string ObjectId { get; set; }
}
public class Detail : IDetail
{
public string ObjectId { get; set; }
}
public class SomeClass
{
public void SomeMethod()
{
SomeOtherClass.SomeOtherMethod(new Detail { ObjectId = "..." });
}
}
public class SomeOtherClass<T> where T : IDetail
{
public static void SomeOtherMethod<T>(T detail)
{
DoSomething(detail.ObjectId); // ObjectId is null here???
}
}
Вам нужен резиновый ducky, http://en.wikipedia.org/wiki/Rubber_duck_debugging – asawyer