【发布时间】:2019-07-01 12:08:44
【问题描述】:
对不起,如果问题名称不是那么明确,但我找不到更好的...
这是我的问题:
我有一堂课:
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");
这会让事情更清楚吗?
【问题讨论】:
-
这段代码对我来说没有意义。你想达到什么目标?
-
在
class WatchableVariable<T>中没有where T : IComparable这样的约束。 -
@AlessandroD'Andria - 你测试过这是否正确吗?不,这就是答案。
-
@Enigmativity 抱歉,但我没有说这可以解决问题。我只是注意到了这一点。
标签: c# generics collections casting