有一个作为基础的类:
public abstract class DataObjectEntityItemBase
{ }
派生类:
public class CatalogDataObjectEntityItem : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer
{ }
有一个方法:
internal void FetchTabSectionDataObjectEntityByParentItem<T1>(
ITabSectionManager dataObjectEntityContainerOwner,
T1 parentDataObjectEntityItem)
where T1 : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer
{ }
我要呼叫
FetchTabSectionDataObjectEntityByParentItem
的问题代码:FetchTabSectionDataObjectEntityByParentItem(
refDoeItem.LinkedConfigurationObject as ITabSectionManager,
refDoeItem as ISupportsTabularDataObjectEntityContainer);
错误:
错误CS0311类型ISupportsTabularDataObjectEntityContainer无法
在泛型类型或方法中用作类型参数“ T1”
FetchTabSectionDataObjectEntityByParentItem(ITabSectionManager,
T1)'。没有来自的隐式引用转换
ISupportsTabularDataObjectEntityContainer DataObjectEntityItemBase
refDoeItem是DataObjectEntityItemBase类型的变量。
refDoeItem
是DataObjectEntityItemBase
类型的变量。 最佳答案
约束是编译时的一种机制,它确保必须由客户端代码指定的任何类型参数支持必须调用的运算符或方法。
在您的情况下,约束where T1 : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer
意味着实例应从DataObjectEntityItemBase
派生并同时实现ISupportsTabularDataObjectEntityContainer
。
通过对refDoeItem进行不必要的强制转换为ISupportsTabularDataObjectEntityContainer
,您将违反此规则。只需删除演员表,一切都将根据您定义的约束自动解决。但是如果您需要将其强制转换为其他类型(例如refDoeItem是一个对象),则应将其强制转换为与整个约束(在您的情况下为CatalogDataObjectEntityItem
)相符的类型。
关于c# - 基于界面设计的C#通用方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41776995/