На самом деле это очень странное исключение, потому что это происходит только тогда, когда я строю проект как Release и не происходит вообще, когда я выбираю Debug. В режиме отладки приложение работает отлично, и следующий код работает хорошо.Activator.CreateInstance (тип) Выдает исключение
Вот код моего метода расширения:
public static T DeepClone<T>(this T source) where T : UIElement
{
T result;
// Get the type
Type type = source.GetType();
// Create an instance
result = Activator.CreateInstance(type) as T; //throws exception here only if I build project as (release)
CopyProperties<T>(source, result, type);
DeepCopyChildren<T>(source, result);
return result;
}
Исключение:
Исключение из 'System.MissingMethodException' типа произошло в System.Private. Reflection.Execution.dll, но не обрабатывался у пользователя код
Дополнительная информация: MissingConstructor_Name, Windows.UI.Xaml.Controls.RelativePanel. Для получения дополнительной информации посетите http://go.microsoft.com/fwlink/?LinkId=623485
Я нашел некоторые связанные вопросы этого исключения, но все они указывают на отсутствующие библиотеки или библиотеки обновления, как this, но ничего не изменилось в моем приложении.
Несвязанный, но 'как T' полезен, когда результат может быть не типа' T'. Функционально, 'x as T' означает' x is T? (T) x: null', за исключением того, что 'x' оценивается только один раз. Вы знаете, что 'x is T' обязательно всегда истинно, и в маловероятном случае, когда вы где-то ошиблись, получение исключения немедленно облегчает отладку, чем' NullReferenceException' где-то внутри 'CopyProperties'. Поэтому я рекомендую '(T) Activator.CreateInstance (type)'. – hvd