You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建值指向成员函数的SortedList?(TcpClient异步通信场景)

用SortedList映射响应字符串到成员函数的正确实现

你的核心问题是没有正确使用委托来引用成员函数,而是错误地直接调用了方法。下面是修正后的实现方案:

1. 定义正确的SortedList类型

把SortedList<string, object>改为SortedList<string, Action<string>>,因为Action<string>正好匹配你的ProcessTime(string)方法签名(无返回值、接受一个string参数)。

2. 初始化方法映射

直接将方法组(方法名)添加到集合中,不需要额外调用:

private SortedList<string, Action<string>> functionList = new SortedList<string, Action<string>>();

private void InitializeList() 
{
    // 直接添加方法引用,不需要传参数
    functionList.Add("Time", ProcessTime);
    functionList.Add("Date", ProcessDate); // 假设你还有ProcessDate方法
}

private void ProcessTime(string reply) 
{
    Console.WriteLine($"处理时间响应: {reply}");
    // 这里写具体的时间处理逻辑
}

private void ProcessDate(string reply) 
{
    Console.WriteLine($"处理日期响应: {reply}");
    // 这里写具体的日期处理逻辑
}

3. 使用映射处理仪器响应

当收到仪器返回的字符串后,直接通过键查找对应的委托并执行:

// 假设从TcpClient异步收到的响应字符串是response
string response = "Time,2024-05-20 14:30:00";
// 这里可以根据实际响应格式提取键,比如分割字符串取第一个部分
string key = response.Split(',')[0];

if (functionList.TryGetValue(key, out Action<string> handler))
{
    // 调用对应的处理方法,传入完整响应
    handler(response);
}
else
{
    // 处理未匹配到的情况,比如默认逻辑或日志
    Console.WriteLine($"未找到响应类型[{key}]的处理方法");
}

关键说明

  • 委托Action<string>是.NET内置的泛型委托,专门用于表示无返回值、接受一个string参数的方法,完美适配你的处理函数签名。
  • 方法组(比如ProcessTime)可以隐式转换为对应的委托类型,不需要手动创建委托实例。
  • SortedList会按键的顺序排序,同时提供O(log n)的查找效率,适合处理大量有限的响应类型。

内容的提问来源于stack exchange,提问作者Part Time User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:20:11