将扩展方法转换为泛型方法时发生编译时错误

时间:2010-11-12 18:28:32

标签: c# silverlight

我在这里有一个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 个答案:

答案 0 :(得分:6)

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 :(得分:1)

您似乎只是返回输入元素,因此您应该能够将方法更改为:

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