开发Telegram Bot遇CS0121错误:StartReceiving调用歧义如何解决?
解决Telegram Bot中StartReceiving调用歧义错误(CS0121)
错误说明
错误CS0121:调用以下方法或属性时存在歧义:
Telegram.Bot.TelegramBotClientPollingExtensions.StartReceiving(...)和Telegram.Bot.TelegramBotClientExtensions.StartReceiving(...)
问题原因
你的项目引用的Telegram.Bot库中,两个不同的静态扩展类提供了同名且参数签名一致的StartReceiving方法,编译器无法自动判断该调用哪一个,因此抛出歧义错误。
解决方案
显式指定调用的扩展类
直接在调用时指明要使用的扩展方法所属的静态类,强制编译器选择目标方法:// 二选一,根据你的库版本选择合适的类 Telegram.Bot.TelegramBotClientPollingExtensions.StartReceiving(client, Update, null); // 或者 Telegram.Bot.TelegramBotClientExtensions.StartReceiving(client, Update, null);清理冗余命名空间引用
检查代码顶部的using指令,如果某个冲突的命名空间是项目不需要的,直接移除即可。比如如果未用到Telegram.Bot.Extensions.Polling或Telegram.Bot.Polling的其他功能,删掉对应的using语句就能消除歧义。更新Telegram.Bot库到稳定版
这类歧义通常是库版本迭代中方法迁移导致的(旧方法暂时保留兼容逻辑),更新到最新稳定版后,冗余的方法可能会被移除,从根源解决问题。
修正后的完整代码
顺便修复了原代码中的小问题(空值判断、阻塞逻辑、大小写匹配):
using System; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Types; using System.Threading; namespace Telegram_bot_Secret { internal class Program { static void Main() { var client = new TelegramBotClient("你的TOKEN"); // 显式指定扩展类解决歧义 Telegram.Bot.TelegramBotClientPollingExtensions.StartReceiving(client, Update, null); Console.ReadLine(); } async static Task Update(ITelegramBotClient botClient, Update update, CancellationToken token) { var message = update.Message; if (message?.Text != null) // 更安全的空值判断 { if (message.Text.ToLower().Contains("hello")) // 统一小写匹配更准确 { await botClient.SendTextMessageAsync(message.Chat.Id, "Hello?"); return; } } // 移除原代码中的Console.ReadKey(),避免阻塞Bot接收后续更新 } } }
内容的提问来源于stack exchange,提问作者Efrem
相关产品推荐
相关产品推荐

