簡體   English   中英

C#調用泛型類方法時使用動態類型

[英]C# Using dynamic type when calling generic class methods

我正在嘗試在泛型類上使用動態對象。 我以this thread的一個答案為基礎,基本上建議使用動態類型而不是反射,並且由於我想提高類型安全性,我寧願使用動態類型方法。

這是我的課程:

public class DataGrid<T>
{
    public List<T>? RawData;

    public void CreateInstance(T dataMessageType)
    {
        RawData = new List<T>();
    }

    public void GetHistoricalData(T dataMessageType)
    {         
        var item = GetDataFromSource(dataMessageType); // ommitted to simplify
        RawData?.Add(item);
    }
}

我試圖在這里進一步使用:

public class MainGrid
{
    public void LoadData()
        {                
            dynamic t = GetDataType(); // this method returns a Type. Ommitted to simplify; 
            var historicalData = new DataGrid<t>(); // Error. See comment 1 below
            historicalData.CreateInstance(t); // Error. Comment 2 below
            historicalData.GetDataFromSource(t); // Error. Also comment 2 below
        }
}

評論 1:我知道這是不正確的,但我不確定如何使用動態類型而不是反射來完成。

注釋 2:當我用(省略的)GetDataTypecode 方法返回的類型替換“t”時,代碼編譯,但出現運行時錯誤,提示“匹配的最佳重載方法有一些無效參數”。 我也看不到我在這里缺少什么...

如果你想要一種動態的感覺,但也比實際的動態更安全。 您可以創建自己的自定義動態對象。 你可以從這個開始:

public class MyObject : DynamicObject
{

    public override bool TrySetMember(SetMemberBinder binder, object? value)
    {
        return base.TrySetMember(binder, value);
    }

    public override bool TryGetMember(GetMemberBinder binder, out object? result)
    {
        return base.TryGetMember(binder, out result);
    }
}

所以你有能力控制一個對象的獲取/設置。 我希望這有幫助。

暫無
暫無

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

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