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

如何优化方法实现?是否应重构C#的RetrieveInts方法?

方法优化清理分析与重构建议

先明确原始代码的问题

你提供的原始代码存在编译错误,逻辑也不完整:

  • 外部方法Retrieveints声明返回List<int>,但既没有返回语句,也从未调用内部定义的同名迭代器方法;
  • 内部迭代器方法仅在complexProperty无效时返回0,有效时无任何输出,逻辑非常单薄。

你的重构代码存在语法问题

你给出的改写版本有两处明显错误:

  • out int写法不合法,out参数必须指定具体变量名,比如out int validationResult;
  • IsValid通常返回bool类型,和方法声明的List<int>返回类型不匹配,无法直接返回。

合理的重构方案

根据原始逻辑(无效时返回包含0的列表,有效时返回空列表),可以直接简化逻辑,完全不需要嵌套局部方法:

基础简化版

public List<int> RetrieveInts(DataToEvaluate dataToEvaluate)
{
    if (!IsValid(dataToEvaluate.complexProperty))
    {
        return new List<int> { 0 };
    }
    return new List<int>();
}

用LINQ简化的版本

如果后续逻辑可能扩展,也可以用更简洁的写法:

public List<int> RetrieveInts(DataToEvaluate dataToEvaluate)
{
    return !IsValid(dataToEvaluate.complexProperty) 
        ? new List<int> { 0 } 
        : Enumerable.Empty<int>().ToList();
}

关于“是否抽离内部方法”的判断

原始代码里的局部内部方法完全没必要存在——它既未被调用,逻辑也极度简单。但如果后续业务逻辑会变得复杂(比如有效时需要返回更多数据、添加更多判断),可以将序列生成逻辑抽离为独立的私有方法,实现职责分离:

public List<int> RetrieveInts(DataToEvaluate dataToEvaluate)
{
    return GetEvaluationResults(dataToEvaluate.complexProperty).ToList();
}

private IEnumerable<int> GetEvaluationResults(ComplexProperty complexProp)
{
    if (!IsValid(complexProp))
    {
        yield return 0;
    }
    // 后续可添加更多业务逻辑,比如其他条件下的返回值
}

这种重构的优势:

  • 职责单一:RetrieveInts只负责将序列转为列表,GetEvaluationResults专注于业务规则的序列生成
  • 代码复用:其他需要相同序列逻辑的地方可直接调用私有方法
  • 可读性提升:每个方法仅处理一件事,逻辑更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:07:30