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