如何通过方法重载避免代码重复?处理同名不同参数方法
解决方法:合并重复逻辑,而非重载
兄弟,先给你敲个重点:你这俩方法根本没法做重载,因为在C#里int和Int32是完全一回事儿——它们是同一个值类型的不同写法,编译器会把它们当成同一个参数类型,所以这俩方法的签名完全重复,编译器直接就会报错。
那该怎么解决代码重复的问题?很简单,直接把两个方法合并成一个就行,因为它们的逻辑完全一样,只是遍历方式不同。
重构后的代码示例
首先,保留一个方法即可,同时可以优化代码的可读性和规范性:
// 遵循C#命名规范:方法名用PascalCase,返回值用关键字bool而非Boolean public bool FuncE(int item) { foreach (var itemUtility in itemsUtilities) { if (itemUtility.item == item) { return true; } else if (itemUtility.item > item) { return false; } } return false; }
如果你更喜欢用for循环(比如需要索引的场景),也可以写成:
public bool FuncE(int item) { int count = itemsUtilities.Count(); for (int i = 0; i < count; i++) { var currentItem = itemsUtilities[i]; if (currentItem.item == item) { return true; } else if (currentItem.item > item) { return false; } } return false; }
额外优化:用LINQ简化逻辑
如果你的itemsUtilities是实现了IEnumerable<T>的集合,还可以用LINQ让代码更简洁:
using System.Linq; // 需要引入LINQ命名空间 public bool FuncE(int item) { // 找到第一个等于或大于item的元素 var target = itemsUtilities.FirstOrDefault(iu => iu.item == item || iu.item > item); // 如果找到的元素等于item就返回true,否则返回false(包括没找到的情况) return target != null && target.item == item; }
补充说明
- 方法重载的核心要求是方法签名唯一:参数的数量、类型(包括泛型类型参数)、顺序至少有一个不同,而
int和Int32不属于不同类型,所以没法重载。 - C#中推荐用关键字类型(比如
bool、int)而非.NET框架类型名称(Boolean、Int32),代码会更符合语言习惯。 - 方法名遵循PascalCase(首字母大写,后续单词首字母也大写)是C#的通用命名规范,能提升代码的可读性。
内容的提问来源于stack exchange,提问作者Basiij garmm
相关产品推荐
相关产品推荐

