美好的一天! 无法理解为什么编译器将其作为错误高线。有人可以告诉我“为什么”。我错了什么? 所以,我有一个通用类
public abstract class SimpleElement<TDataIndexer> where TDataIndexer:IDataIndexator
{
public TDataIndexr[] po_registr;
protected Update updateDelegate;
}
另外,我有委托,处理更新可视组件
public delegate object Update(IDataIndexator[] regs);
我的委托需要参数类型IDataIndexer
。我如何将泛型参数传递给该委托?
public delegate object Update(IDataIndexator[] regs);
public abstract class SimpleElement<TDataIndexer> where TDataIndexer:IDataIndexator
{
public TDataIndexr[] po_registr;
protected Update updateDelegate;
public function foo(){
this.updateDelegate(po_registr); // here is error that parameter should be IDataIndexator[], but not TDataIndexer[]
}
}
答案 0 :(得分:2)
为了让您认为应该自动发生的事情,您的TDataIndexer
必须被约束为class
public abstract class SimpleElement<TDataIndexer>
where TDataIndexer:class, IDataIndexator
{ ...}
答案 1 :(得分:1)
尝试使用.Cast
public interface IDataIndexator { }
public delegate object Update(IDataIndexator[] regs);
public abstract class SimpleElement<TDataIndexer> where TDataIndexer : IDataIndexator
{
public TDataIndexer[] po_registr;
protected Update updateDelegate;
public void foo()
{
this.updateDelegate(po_registr.Cast<IDataIndexator>().ToArray()); // here is error that parameter should be IDataIndexator[], but not TDataIndexer[]
}
}
答案 2 :(得分:0)
TDataIndexr : IDataIndexator
并不意味着TDataIndexr[]
在编译器眼中是IDataIndexator[]
。
创建IDataIndexator[]
或this.updateDelegate(po_registr.Cast<IDataIndexator>().ToArray());
。
在某种程度上,系统希望获得类型为Array<IDataIndexator>
的参数,您将传递Array<SomeType>
,其中typeof(SomeType) != typeof(IDataIndexator)
。因此,编译器typeof(Array<IDataIndexator>) != typeof(Array<SomeType>)
会产生错误。