如何从iDictionary返回一个委托?

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)

dle*_*lev 6

你的DBLookup领域应该是一个Dictionary<string, MyDel>.这样,获取值时,返回的类型将是a MyDel,而不是object.

您收到错误,因为作为out参数传递的引用类型必须与参数的类型完全匹配.由于out参数是类型MyDel而参数on TryGetValueobject(因为这是字典中值的类型),所以会出错.完成上述更改后,参数的类型将与参数的类型匹配,错误消息将消失.

通常,如果您发现自己声明了一个包含object值的字典,请考虑您实际存储的内容,并查看是否可以使用其他类型.