Rob*_*ham 0 c# delegates idictionary
我试图使用字典来引用委托,但是当我尝试检索委托指针时出现错误.对于更多上下文,我被赋予一个字符串用于在C结构中查找值.我已经编写了在C结构中获取/设置数据的方法,但我现在需要调用给定字符串的方法.如果你有更好的方法,请告诉我.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestCode
{
public class tuboFillLinePresets
{
public IDictionary<string, object> DBLookup { get; set; }
public config_data Data;
delegate float MyDel(int chan);
public float ChanGain(int chan)
{
return Data.ChannelGain(chan);
}
public float MagCurr(int chan)
{
return Data.MagCurrent(chan);
}
public tuboFillLinePresets()
{
DBLookup = new Dictionary<string, object>();
MyDel cg = new MyDel(ChanGain);
MyDel mc = new MyDel(MagCurr);
DBLookup.Add("HBGain", cg);
DBLookup.Add("LBGain", cg);
DBLookup.Add("MagCurrent", mc);
}
public LinePresets tuboGetLinePresets(LinePresets LinePresets)
{
foreach (var item in LinePresets.Parameters)
{
String s = item.Key;
MyDel func;
DBLookup.TryGetValue(s, out func); // error here
LinePresets.Parameters[s] = func(3);
}
return LinePresets;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你的DBLookup领域应该是一个Dictionary<string, MyDel>.这样,获取值时,返回的类型将是a MyDel,而不是object.
您收到错误,因为作为out参数传递的引用类型必须与参数的类型完全匹配.由于out参数是类型MyDel而参数on TryGetValue是object(因为这是字典中值的类型),所以会出错.完成上述更改后,参数的类型将与参数的类型匹配,错误消息将消失.
通常,如果您发现自己声明了一个包含object值的字典,请考虑您实际存储的内容,并查看是否可以使用其他类型.