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

如何通过方法重载避免代码重复?处理同名不同参数方法

解决方法:合并重复逻辑,而非重载

兄弟,先给你敲个重点:你这俩方法根本没法做重载,因为在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;
}

补充说明

  1. 方法重载的核心要求是方法签名唯一:参数的数量、类型(包括泛型类型参数)、顺序至少有一个不同,而int和Int32不属于不同类型,所以没法重载。
  2. C#中推荐用关键字类型(比如bool、int)而非.NET框架类型名称(Boolean、Int32),代码会更符合语言习惯。
  3. 方法名遵循PascalCase(首字母大写,后续单词首字母也大写)是C#的通用命名规范,能提升代码的可读性。

内容的提问来源于stack exchange,提问作者Basiij garmm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:06