Страницы

Поиск по вопросам

суббота, 1 февраля 2020 г.

Возврат объекта типа T

#c_sharp #net #generics


Имеется такой код:
public static FrameworkElement GetParentOfType(FrameworkElement element)
{
    if (element is T) return element;
    while (true)
    {
        element = element.Parent as FrameworkElement;
        if (element is T) break;
    }
    return element;
}
...
MyPanel myPanel = (MyPanel)GetParentOfType(myTextBox);
MyLabel myLabel = (MyLabel)GetParentOfType(myTextBox);
...

Но мне хотелось бы сделать что то вроде этого:
public static T GetParentOfType(FrameworkElement element)
{
    if (element is T) return element as T;
    while (true)
    {
        element = element.Parent as FrameworkElement;
        if (element is T) break;
    }
    return element as T;
}
...
MyPanel myPanel = GetParentOfType(myTextBox);
MyLabel myLabel = GetParentOfType(myTextBox);
...

Но как хотелось бы не работает. Где об этом почитать или как быть? Сам искать пытался,
но как правильно сформулировать запрос не знаю.    


Ответы

Ответ 1



Надо вот как: public static T GetParentOfType(FrameworkElement element) where T : FrameworkElement { if (element is T) return element as T; while (element != null) { element = element.Parent as FrameworkElement; if (element is T) break; } return element as T; }

Ответ 2



Попробуй что-то такое public T ConvertTo(SomeType val) { return (T)Convert.ChangeType(val, Type.GetTypeCode(typeof(T))); } Т.е. использовать принудительное преобразование типа, а не оператор as

Комментариев нет:

Отправить комментарий