У меня есть коллекция List (Component - это пользовательский класс) с единственным элементом , который наследуется от XTYPE.
Но по какой-то причине это не работает:
X = (XTYPE)Components.Single((c) => c is XTYPE);
Я получаю исключение InvalidOperationException с сообщением «Последовательность не содержит соответствующий элемент», но если я добавлю точку останова в эту строку и сделаю это, она вернет true
:
Components[0] is XTYPE
Кроме того, если я сделаю это, он вернет true
:
Components[0].GetType().BaseType.BaseType == typeof(XTYPE)
Help.
OK , поэтому я добавил несколько проверок в свой код...
foreach (Component c in Components)
Console.WriteLine(c.GetType().BaseType.BaseType == typeof(Bridge));
if (Components.Count == 0)
throw new Exception("No components");
if (!(Components[0].GetType().BaseType.BaseType == typeof(Bridge)))
throw new Exception("Not bridge.");
False записывается в консоль, но имена типов совпадают.Это, вероятно, DLL ад.И теперь требуется разный набор информации, чтобы ответить на вопрос.
Я думаю, что вы, ребята, помогли мне перейти к моему решению.
Дальнейшее объяснение: конкретный компонент был создан с помощьюотражение от отдельного экземпляра библиотеки DLL, в которой есть XTYPE.Итак, теперь у нас есть два XTYPE, но технически они не совпадают с типом, потому что у них есть дескриптор различий.
Отладчик не проверял в правильном контексте, поэтому он думал, что типы были одинаковыми,Но это было неправильно.