我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我将其转换为通用方法时.我得到编译时错误.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;
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
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;
}
Run Code Online (Sandbox Code Playgroud)
甚至更好
public static T SetToolTip<T>(
this T element, object value)
where T : System.Windows.DependencyObject
{
System.Windows.Controls.ToolTipService.SetToolTip(element, value);
return element;
}
Run Code Online (Sandbox Code Playgroud)
(不确定最后一个;编辑:检查,它的工作原理.)