簡體   English   中英

函數C#的通用參數

[英]generic parameter to function c#

美好的一天! 無法理解為什么編譯器將其高行顯示為錯誤。 有人可以告訴我“為什么”。 我怎么了 所以,我有一個通用類

    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[]
        }
    }

為了使您認為應該自動發生的事情,必須將TDataIndexer限制為一個class

public abstract class SimpleElement<TDataIndexer> 
    where TDataIndexer:class, IDataIndexator 
{ ...}

實時示例: http//rextester.com/KDI86395

嘗試使用.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[]
    }
}

在編譯器看來, 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>)會產生錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM