首页 > 解决方案 > 返回实现接口的对象作为所述接口

问题描述

我试图返回一个实现某个接口的对象作为该接口,但CS0030: Cannot convert type 'System.Web.UI.Control' to 'T'在编译时出现错误。

我的代码:

public static T GetAncestorOfType<T>(System.Web.UI.Control control)
{
    var parent = control;
    while (!(parent is T))
    {
        parent = parent.Parent;
        continue;
    }
    return (T)parent;
}

错误与最后一行有关,其中parent被强制转换为T.

也许我需要对该方法进行某种类型的约束?

标签: c#asp.netinterface

解决方案


您可以使用约束并避免强制转换。

public static T GetAncestorOfType<T>(T control) where T : System.Web.UI.Control

这样做,您的方法的代码将变为:

var parent = control;
while (!(parent is T))
{
    parent = parent.Parent;
    continue;
}
return parent;

推荐阅读