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

如何在运行时将方法参数嵌入属性名称以精简重复代码?

代码精简方案

1. 先封装Line数据结构

把原来零散的Line1X、Line1Y、Line2X、Line2Y打包成一个类,让数据管理更清晰:

public class Line
{
    public int X { get; set; }
    public int Y { get; set; }
}

然后把原来的单个属性替换成Line对象集合,比如:

// 替代原来的Line1X、Line1Y、Line2X、Line2Y
private Line[] _lines = new Line[]
{
    new Line(), // 对应原Line1的X、Y
    new Line()  // 对应原Line2的X、Y
};

2. 抽离重复逻辑,统一处理

接下来把嵌套switch里的重复代码抽出来,先根据lineNo拿到对应的Line对象,再统一处理参数的增减逻辑:

Line targetLine = null;
switch (lineNo)
{
    case "Line 1":
        targetLine = _lines[0];
        break;
    case "Line 2":
        targetLine = _lines[1];
        break;
}

if (targetLine == null) return;

// 所有Line的参数处理逻辑只写一次
switch (parameter)
{
    case "DecX":
        if (targetLine.X > 0)
            targetLine.X -= 1;
        break;
    case "IncX":
        if (targetLine.X < LabelWidth)
            targetLine.X += 1;
        break;
    case "DecY":
        if (targetLine.Y > 0)
            targetLine.Y -= 1;
        break;
    case "IncY":
        if (targetLine.Y < LabelHeight)
            targetLine.Y += 1;
        break;
}

3. 进阶优化(可选)

如果以后要加更多Line,用字典映射lineNo和Line对象,就不用每次新增都修改switch了:

// 提前初始化字典
private Dictionary<string, Line> _lineMap = new Dictionary<string, Line>()
{
    {"Line 1", new Line()},
    {"Line 2", new Line()}
};

// 直接通过lineNo取目标Line,取不到就直接返回
if (!_lineMap.TryGetValue(lineNo, out var targetLine)) return;

// 后面的参数处理逻辑和上面完全一样

这样改完之后,不管有多少条Line,参数处理的核心逻辑只需要写一遍,既消除了重复代码,后续维护也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:23:42