c# - C# 泛型对象不能添加到该泛型类型的列表中
问题描述
抱歉,如果问题名称不是那么明确,但我找不到更好的...
这是我的问题:
我有一堂课:
public class WatchableVariable<T>{
...
}
一个容器类:
public class CommonWatchableVariableContainer
{
private List<WatchableVariable<IComparable>> Watchables;
...
public void Add<T>(string name) where T : IComparable
{
WatchableVariable<T> test = new WatchableVariable<T>(name);
Watchables.Add(test);
}
...
}
并有一个奇怪的错误:
哪个,IMO,应该可以工作,因为我在我的泛型类型上应用了“IComparable”约束。
有人可以指出我可能搞砸的地方吗?
编辑:我已经尝试在 Class WatchableVariable 上实现 IComparable 导致完全相同的错误:/
public class WatchableVariable<T> : ObservableObject where T : IComparable
{ ... }
编辑 2:在尝试实施 canton7 提出的解决方案时,我意识到我可能会被阻止。
这是我创建的界面:
public interface IWatchableVariable<out T>
{
T Variable { get; set; }
}
这是我想要实现的目标:
double dVar1 = process();
double dVar2 = process();
double dVar3 = process();
bool bVar1 = process();
CommonWatchableVariableContainer container = new CommonWatchableVariableContainer ();
container.Add<bool>("myTrackedVariable_1");
container.Add<double>("myTrackedVariable_2");
container["myTrackedVariable_1"].Variable = dVar1; //Variable would be a property of type T (which would be double in this case)
container["myTrackedVariable_2"].Variable = bVar1;
foreach(IWatchableVariable WV in container){
process(WV);
}
container.Remove("myTrackedVariable_1");
这会让事情变得更清楚吗?
解决方案
我不知道您要实现什么目标,但要使这项工作发挥作用,您应该:使用IComparable
约束声明您的类型。
public class WatchableVariable<T> where T : IComparable
{
public WatchableVariable(string name) { }
}
然后使您的第二类具有相同的约束。
public class CommonWatchableVariableContainer<T> where T : IComparable
{
private List<WatchableVariable<T>> Watchables;
public void Add(string name)
{
var test = new WatchableVariable<T>(name);
Watchables.Add(test);
}
}
推荐阅读
- sql - SQL 查询返回同一表中子组内至少一列匹配的所有记录
- vba - DAO.Recordset 返回表名而不是列值
- python - 将sql查询转换为ORM Odoo
- python - 如何使用数据表过滤 Python Dash 报告列的含义
- mysql - 尝试对数据进行排序和收集
- python - TypeError:在我的代码中值已经是整数的“int”和“str”实例之间不支持“>”
- android - 检测 Android Go 手机
- c++ - 用于沿数字键轴插入 T 的容器
- python - 我无法使用 python selenium 在 gmail 中注册或创建帐户,因为我的浏览器不安全
- reactjs - 调度操作时如何向 Redux 状态添加新属性