[英]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.