我一直在尝试将泛型引入我们的自动化代码,因此我尝试将WpfControl转换为泛型类型T,其中T被约束为WpfControl类型。
return control as T;
T将永远是WpfControl的子代,但是当我将类型为WpfControl的控件转换为泛型类型时,它返回null。我还尝试将控制转换为确切的子类型,例如:
var childControl = control as WpfTabList;
这仍然会返回null
。有人遇到过任何类似的问题吗?
请参阅此WpfControl Class
答案 0 :(得分:0)
一些建议:
首先,在通用方法中,请使用geteric类型规范。像
public T GetControl<T>(...) where T : WpfControl
在你的假设和实施中存在误解
您试图将WpfControl
与WpfTabList
匹配,这在子控件不是TabList的情况下是错误的。
答案 1 :(得分:0)
这绝对有效。我的github上有一整套这些。
您可以添加更多显示控件设置的代码吗?
以下是一些摘录,以显示这可能是什么样的。
public static T Find<T>(this UITestControl parent) where T : UITestControl, new()
{
return new T() { Container = parent };
}
public static IEnumerable<T> FindAll<T>(this UITestControl parent) where T : UITestControl, new()
{
return parent.Find<T>().FindAllAsType();
}
private static IEnumerable<T> FindAllAsType<T>(this T current) where T : UITestControl, new()
{
if (typeof(T).IsSubclassOf(typeof(HtmlControl)))
{
return current.FindMatchingControls().Select(x => new T().ExtendFrom(x));
}
return current.FindMatchingControls().OfType<T>();
}
private static IEnumerable<U> FindAllCastTo<T, U>(this T current) where T : UITestControl
{
return current.FindMatchingControls().Cast<U>();
}
最可能的情况是控件类型不是您尝试将其强制转换为或者为null。