c# - 返回实现接口的对象作为所述接口
问题描述
我试图返回一个实现某个接口的对象作为该接口,但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
.
也许我需要对该方法进行某种类型的约束?
解决方案
您可以使用约束并避免强制转换。
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;
推荐阅读
- google-cloud-platform - TERRAFORM 创建 DNS 记录集时出错:googleapi:错误 400:'entity.change.additions[0].rrdata[0] 的值无效
- kotlin - 注解处理异常:分析失败:java.lang.reflect.InvocationTargetException
- azure - 通过服务主体对 Azure HTTP 函数进行身份验证 - 没有随 client_credentials 流返回的“identity_token”
- javascript - 尝试使用 --prod 构建我的离子应用程序,但它不起作用
- java - 不能从静态上下文引用非静态字段 mFirebaseAnalytics
- php - 如何使用 PHP 从媒体二进制文件创建和保存图像文件?
- javascript - 两列或多列上 DT::table 中的闪亮合并单元格
- powershell - 使 Powershell 函数在流水线和正常调用中都能正常工作
- python - 包含列表的 SQL 变量
- ios - 如何使用响应式编程来订阅数据数组中的单项更改(插入或删除)?