Ошибка времени компиляции происходит при преобразовании метода расширения в универсальный метод - PullRequest
2 голосов
/ 12 ноября 2010

У меня есть метод extension, например, такой:

public static class Extensions
{
    public static System.Windows.DependencyObject SetToolTip(this System.Windows.DependencyObject element, object value)
    {
        System.Windows.Controls.ToolTipService.SetToolTip(element, value);
        return element;
    }
}

теперь, когда я преобразую его в универсальный метод.Я получаю ошибку времени компиляции.Error 1 Cannot convert type 'System.Windows.DependencyObject' to 'T' Extensions.cs 149 16

public static class Extensions
{
    public static T SetToolTip<T>(this System.Windows.DependencyObject element, object value)
    {
        System.Windows.Controls.ToolTipService.SetToolTip(element, value);
        return (T)element;
    }
}

есть идеи, как решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 12 ноября 2010
public static T SetToolTip<T>(
       this System.Windows.DependencyObject element, object value)
       where T : System.Windows.DependencyObject
{
    System.Windows.Controls.ToolTipService.SetToolTip(element, value);
    return element as T;
}

или даже лучше

public static T SetToolTip<T>(
       this T element, object value)
       where T : System.Windows.DependencyObject
{
    System.Windows.Controls.ToolTipService.SetToolTip(element, value);
    return element;
}

(не уверен насчет последнего; РЕДАКТИРОВАТЬ: проверено, работает.)

1 голос
/ 12 ноября 2010

Кажется, вы просто возвращаете элемент ввода, поэтому вы должны изменить свой метод на:

public static T SetToolTip<T>(this T element, object value) where T : DependencyObject
{
    ToolTipService.SetToolTip(element, value);
    return element;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...