.NET сообщает мне TypeLoadException: нарушает ограничение параметра типа 'T', в то время как мой код явно не нарушает его

Я пытаюсь инициализировать объект DataEditor , где мой класс DataEditor реализует интерфейс IDataEditor где T: IEditableObject .

DataEditor editor = GetEditorFor(student);

Во время выполнения я получил исключение TypeLoadException: GenericArguments [0], 'Namespace.Data.Student', в 'Namespace.IDataEditor`1 [T]' нарушает ограничение параметра типа. «Т». Исключение происходит в строке выше, еще до того, как оно попадет внутрь метода GetEditorFor.

Единственное ограничение на T - это IEditableObject , и мой класс Student явно реализует его (я дважды проверил орфографию интерфейса, пространство имен и т. Д.), А также компилятор этого не делает. t выдает мне какую-либо ошибку, поэтому я понятия не имею, почему эта ошибка возникает во время выполнения.

Если я удалю ограничение IEditableObject , код будет работать без этого исключения, но моя логика зависит от того, является ли класс IEditableObject , поэтому это не вариант.

Есть идеи, почему это происходит и как это исправить?

Эти страницы кажутся связанными, но я все еще не знаю решения

Это ошибка .NET? Кто-нибудь нашел обходной путь?

Изменить: объявление по запросу

public class DataEditor : ViewModel, IDataEditor where T :  IEditableObject

public interface IDataEditor : IDataEditor 
    where T :  IEditableObject

7
задан Louis Rhys 21 September 2011 в 07:15
поделиться