如何使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")并返回它返回的任何值。

我怎样才能做到这一点?

如何使Dictionary返回方法结果?

将频道名称存储在字典中:

//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();