我有代表
public delegate object ABC(object a);
我还有其他一些想做的课
new Dictionary<string,object>(){
{"key1",delegate(object val){return "blah"}},
{"key2",delegate(object val){return "blah2"}}};
问题是如果我没有像这样提前声明委托
ABC del = delegate(object val){return "blah"};
然后在我的字典中粘贴del,它将无法编译,因为在那里使用ABC以某种方式告诉它如何将其存储为对象,其中作为第一个示例它不知道委托类型是什么。
问题是,任何缩短它的方法,所以我不必在字典之外声明变量。像
这样的东西 delegate<ABC>(object val){return "blah1"}
这样的事情是否存在?
答案 0 :(得分:1)
为什么不像这样Dictionary<string,ABC>
定义你的字典,那么你可以这样做:
var dict = new Dictionary<string, ABC>
{
{"key1", delegate (object obj) { return "blah"; }}
};
或者您可以使用lambda语句:
var dict = new Dictionary<string, ABC> {{"key1", obj => "blah" }};
答案 1 :(得分:1)
无需像这样创建自定义委托。只需使用System.Func<T,TResult>
:
var dict = new Dictionary<string,Func<object,object>>
{
{"Blah", x => "Blah",},
{"Blah2", x => "Blah2"}
};
答案 2 :(得分:0)
如果您的值都是ABC
个实例,则可以更精确地指定字典值类型:
var d = new Dictionary<string,ABC>()
{
{"key1",delegate(object val){return "blah";}},
{"key2",delegate(object val){return "blah2";}}
}
答案 3 :(得分:0)
如果我正确理解你的目标,你可以使用lambdas来实现这个目标:
private delegate object ABC(object a);
private Dictionary<string, ABC> dict = new Dictionary<string, ABC>
{
{ "key1", a => "blah1" },
{ "key2", a => { return "blah2"; } }
};
请注意,我已经用两种不同的方式表达了相同的功能。用于key1的lambda是简化的,与key2的lambda具有相同的含义。我会为a
分配object
值,并将其传递给您的代表。