5

我一直在尝试将泛型引入我们的自动化代码,因此我试图将 WpfControl 转换为泛型类型 T,其中 T 被限制为 WpfControl 类型。

return control as T;

T 将始终是 WpfControl 的子级,但是当我将 WpfControl 类型的控件转换为泛型类型时,它返回 null。我还尝试将控制权转换为确切的子类型,例如:

var childControl = control as WpfTabList;

这仍然返回null。有人遇到过类似的问题吗?

看到这个WpfControl 类

4

2 回答 2

0

一些建议:

首先,在您的通用方法中,请使用 geteric 类型规范。喜欢

public T GetControl<T>(...) where T : WpfControl

在子控件不是 TabList 的情况下,您尝试将 aWpfControl与 a匹配的假设和实现存在错误。WpfTabList

于 2014-01-08T14:45:50.043 回答
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>();
    }

最可能的情况是控件类型不是您尝试将其转换为的类型,或者它为空。

于 2016-05-13T18:00:44.430 回答