c#未完整声明的委托声明

c#未完整声明的委托声明,c#,delegates,C#,Delegates,我有一位代表 public delegate object ABC(object a); 我还有别的课要上 new Dictionary<string,object>(){ {"key1",delegate(object val){return "blah"}}, {"key2",delegate(object val){return "blah2"}}}; 然后把del放在我的字典里,它不会编译,因为ABC的使用不知怎么告诉它如何将它存储为一个对象,第一个例子是它不知道委托

我有一位代表

public delegate object ABC(object a);
我还有别的课要上

new Dictionary<string,object>(){

{"key1",delegate(object val){return "blah"}},

{"key2",delegate(object val){return "blah2"}}};
然后把del放在我的字典里,它不会编译,因为ABC的使用不知怎么告诉它如何将它存储为一个对象,第一个例子是它不知道委托类型是什么

问题是,有什么方法可以简化它,这样我就不必在字典之外声明变量了。差不多

delegate(objectval){return“blah1”}


是否存在类似的情况?

如果您的值都是
ABC
实例,则可以更精确地指定字典值类型:

var d = new Dictionary<string,ABC>()
{
    {"key1",delegate(object val){return "blah";}},
    {"key2",delegate(object val){return "blah2";}}
}
var d=newdictionary()
{
{“key1”,委托(object val){返回“blah”},
{“key2”,委托(对象val){返回“blah2”;}
}

你为什么不这样定义你的字典呢
字典
,然后你可以:

var dict = new Dictionary<string, ABC> 
   {
      {"key1", delegate (object obj) { return "blah"; }}
   };
var dict=新字典
{
{“key1”,委托(objectobj){返回“blah”;}
};
也可以使用lambda语句:

var dict = new Dictionary<string, ABC> {{"key1", obj => "blah" }};
var dict=newdictionary{{“key1”,obj=>“blah”};

不需要创建这样的自定义委托。只需使用:

var dict=新字典
{
{“诸如此类”,x=>“诸如此类,},
{“Blah2”,x=>“Blah2”}
};

如果我正确理解了您的目标,您可以使用lambdas来实现这一点:

private delegate object ABC(object a);

private Dictionary<string, ABC> dict = new Dictionary<string, ABC>
    {
        { "key1", a => "blah1" },
        { "key2", a => { return "blah2"; } }
    };
私有委托对象ABC(对象a);
专用词典dict=新词典
{
{“key1”,a=>“blah1”},
{“key2”,a=>{return“blah2”;}
};
注意,我用两种不同的方式表达了相同的功能。用于键1的lambda经过简化,其含义与键2的lambda相同<代码>一个将被分配传递给您的代理的
对象

var dict = new Dictionary<string,Func<object,object>> 
{
  {"Blah", x => "Blah",},
  {"Blah2", x => "Blah2"}
};
private delegate object ABC(object a);

private Dictionary<string, ABC> dict = new Dictionary<string, ABC>
    {
        { "key1", a => "blah1" },
        { "key2", a => { return "blah2"; } }
    };