C#方法返回类型问题:OPC DA读取方法报CS0161错误
解决OPC DA读写方法的返回值与数据传递问题
问题分析
- 错误
CS0161:ReadX方法声明返回string类型,但方法体内没有任何return语句,C#编译器要求所有代码路径必须返回对应类型的值。 - void版
ReadX无法传递数据:C#中string为不可变的引用类型,值传递时方法内修改的是参数副本,外部变量不会受到影响。
解决方案
- 给
ReadX添加返回语句,满足方法的返回值声明要求。 - 通过方法返回值传递读取结果,替代原有的参数传递方式,确保外部能获取到读取的数据。
- 优化Item创建逻辑:避免每次调用读写方法都重复添加同一Item,先检查Group中是否已存在目标Item,不存在再创建,提升操作效率。
修改后的完整代码
using System; using System.Linq; using TitaniumAS.Opc.Client.Common; using TitaniumAS.Opc.Client.Da; namespace OPCDA { class Program { static void Main(string[] args) { TitaniumAS.Opc.Client.Bootstrap.Initialize(); Uri url = UrlBuilder.Build("Kepware.KEPServerEX.V6"); using (var server = new OpcDaServer(url)) { server.Connect(); OpcDaGroup group = server.AddGroup("MyGroup"); group.IsActive = true; Ascon ascon1 = new Ascon(); // 通过返回值接收读取结果并赋值 ascon1.ALM = ReadX("Channel1.Ascon1.AsconS"); Console.WriteLine("value = {0}", ascon1.ALM); void WriteX(string link, string value) { // 检查是否已存在目标Item,不存在则添加 var tag = group.Items.FirstOrDefault(i => i.ItemId == link); if (tag == null) { var definition = new OpcDaItemDefinition { ItemId = link, IsActive = true }; group.AddItems(new[] { definition }); tag = group.Items.First(i => i.ItemId == link); } HRESULT[] results = group.Write(new[] { tag }, new object[] { value }); } string ReadX(string link) { // 检查是否已存在目标Item,不存在则添加 var tag = group.Items.FirstOrDefault(i => i.ItemId == link); if (tag == null) { var definition = new OpcDaItemDefinition { ItemId = link, IsActive = true }; group.AddItems(new[] { definition }); tag = group.Items.First(i => i.ItemId == link); } // 仅读取目标Item,而非整个Group的所有Item OpcDaItemValue[] values = group.Read(new[] { tag }, OpcDaDataSource.Device); // 返回转换后的字符串值,解决CS0161错误 return Convert.ToString(values[0].Value); } } } } // 补充原代码缺失的Ascon类定义 class Ascon { public string ALM { get; set; } } }
关键修改说明
- 移除
ReadX方法中多余的read参数,直接返回读取结果,外部通过赋值操作接收数据。 - 在
ReadX方法末尾添加return语句,满足返回值要求,修复CS0161错误。 - 读写方法中增加Item存在性检查,避免重复创建同一Item,减少不必要的服务器交互。
- 修改
ReadX的读取逻辑,仅读取目标Item而非整个Group的所有Item,提升读取效率。
内容的提问来源于stack exchange,提问作者Seyl
相关产品推荐
相关产品推荐

