如何使Dictionary返回方法结果?
本文关键字:结果 方法 返回 何使 Dictionary | 更新日期: 2023-09-27 18:11:47
//in SomeClass
pprivate Client _client = new Client();
public Dictionary<string, Channel> Channels = new Dictionary<string, Channel>();
public SomeClass()
{
Channels.Add("main", _client.GetChannel("#channelName"));
Channels.Add("secundary", _client.GetChannel("#secondChannelName"));
}
//in Client
public Channel GetChannel(string channelName)
{ //return a channel specific to this Client.
}
当我创建SomeClass()
时,字典被当前_client.GetChannel()
返回的Channel
对象填充。它将Channel
s保存到字典中,但我希望它将-方法-添加到字典中;并使每次调用字典返回当前_client.GetChannel()
在调用时返回的任何内容。
例如,当Channels["main"]
被调用时,我希望它为我调用Client.GetChannel("#channelName")
并返回它返回的任何值。
我怎样才能做到这一点?
将频道名称存储在字典中:
//in SomeClass
public Client Client = new Client();
public Dictionary<string, string> Channels = new Dictionary<string, string>();
public SomeClass()
{
Channels.Add("main", "#channelName");
Channels.Add("secundary", "#secondChannelName");
}
//in Client
public Channel GetChannel(string channelName)
{ //return a channel specific to this Client.
}
然后,为了获得Channel对象,调用GetChannel:
string channelName;
Channels.tryGetValue("main", out channelName);
Channel thisChannel = Client.GetChannel(channelName);
如果你在SomeClass外部做这件事(因为客户端是私有的),你可以从SomeClass公开一个公共方法来做同样的事情:
// to run it in a different class:
Channel thisChannel = someClassInstance.GetChannelObject("#main");
// in SomeClass:
public Channel GetChannelObject(string channelID) {
string channelName;
Channels.tryGetValue(channelID, out channelName);
Channel thisChannel = Client.GetChannel(channelName);
return(thisChannel);
}
你可以这样做:
public Dictionary<string, Func<Channel>> Channels
= new Dictionary<string, Func<Channel>>();
public SomeClass()
{
Channels.Add("main", () => _client.GetChannel("#channelName"));
Channels.Add("secundary", () => _client.GetChannel("#secondChannelName"));
}
那么你可以这样称呼它:
var main = Channels["main"]();
或:
var main = Channels["main"].Invoke();