Как сравнить страницу xaml с e.OriginalSource?
У меня есть метод, который выглядит ниже:
private void someEvent(RoutedEventArgs e)
{
if(e.OriginalSource == typeof(a.b.c.somePages))
}
Этот метод будет в моей viewModel. С точки останова, я вижу, есть этот e.OriginalSource, который имеет мою страницу xaml somePages
как ценность. Поэтому я пытаюсь сравнить значение. Но это дает мне предупреждение, как показано ниже:
Possible unintended reference comparison; to get a value comparison,
cast the left hand side to type 'System.Type'
Поэтому я обновил свой код до if((System.Type)e.OriginalSource == typeof(a.b.c.somePages))
но предупреждение все еще там. Могу ли я знать, что не так?
3 ответа
В этой ситуации вам нужно набрать cast. Вы не можете получить тип объекта без приведения, потому что для e.OriginalSource
тип будет Object
, Кроме того, в строительстве typeof
должен быть объектом System.Type
тип:
Используется для получения
System.Type
объект для типа.
Поэтому попробуйте это:
Page page = e.OriginalSource as Page;
if (page != null)
{
string test = page.ToString();
}
Или просто использовать ToString()
метод для e.OriginalSource
как вы упомянули.
Я не уверен, что это правильный путь, но я могу сравнить, используя следующий способ:
if(e.OriginalSource.ToString() == "a.b.c.SomePages")
Вы сравнивали объект с type
, Если вы вместо этого намеревались сравнить тип объекта, попробуйте сделать это следующим образом:
if (e.OriginalSource.GetType() == typeof(a.b.c.somePages))
{
}
Другой способ использования это оператор:
if(e.OriginalSource is a.b.c.SomePages)
{
}
Из ссылки MSDN выше, о is
:
Msgstr "Проверяет, совместим ли объект с данным типом".