5

自動化コードにジェネリックを導入しようとしてきたので、WpfControl をジェネリック型 T にキャストしようとしていますが、T は WpfControl 型に制限されています。

return control as T;

T は常に WpfControl の子になりますが、WpfControl 型のコントロールをジェネリック型にキャストすると、null が返されます。また、次のような正確な子タイプにコントロールをキャストしようとしました。

var childControl = control as WpfTabList;

これはまだ を返しますnull。誰もが同様の問題を経験していますか?

このWpfControl クラスを参照してください

4

2 に答える 2

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 であるということです。

于 2016-05-13T18:00:44.430 に答える
0

いくつかの推奨事項:

まず、ジェネリックメソッドではgeteric型指定を利用してください。お気に入り

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

子コントロールが TabList ではない場合、 aWpfControlを aに一致させようとしている仮定と実装に矛盾があります。WpfTabList

于 2014-01-08T14:45:50.043 に答える