如何优化方法实现?是否应重构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
相关产品推荐
相关产品推荐

