C#调用ContainsDuplicate函数报当前上下文不存在错误问题咨询
问题原因
- 方法归属问题:
ContainsDuplicate是定义在solution类中的实例成员,不属于Main方法所在的类,也没有被标记为静态,无法在Main中直接通过方法名调用 - 方法逻辑错误:
HashSet.Add()方法的返回值规则是元素不存在、添加成功时返回true,元素已存在、添加失败时返回false,你当前的逻辑会导致第一个元素插入成功就直接返回true,和「判断是否存在重复元素」的需求完全相反
修复方案
方案1:修改为静态方法直接调用
把solution类和对应方法改为静态,即可直接通过类名调用,同时修正逻辑问题:
static void Main(string[] args) { var result = Solution.ContainsDuplicate(new int[] { 1, 2, 3, 4, 5, 1 }); Console.WriteLine(result); } // 类名建议遵循C#帕斯卡命名规范改为大写开头的Solution public static class Solution { // 方法改为静态成员 public static bool ContainsDuplicate(int[] nums) { var hash = new HashSet<int>(); foreach (var i in nums) { // 逻辑修正:添加失败说明元素已存在,返回true if (!hash.Add(i)) return true; } return false; } }
方案2:实例化类后调用实例方法
不需要修改静态属性,先创建solution类的实例再调用方法即可:
static void Main(string[] args) { // 先实例化solution类 var sol = new solution(); var result = sol.ContainsDuplicate(new int[] { 1, 2, 3, 4, 5, 1 }); Console.WriteLine(result); } public class solution { public bool ContainsDuplicate(int[] nums) { var hash = new HashSet<int>(); foreach (var i in nums) { if (!hash.Add(i)) return true; } return false; } }
内容的提问来源于stack exchange,提问作者inanimateobject07
相关产品推荐
相关产品推荐

