首页 > 解决方案 > 在不同条件下更改相同值时重构 if 语句

问题描述

我一直在努力重构一些代码,然后我做了这样的事情。主要思想是我有几个包含实现的方法,在我的例子中它们更改了引用的字符串变量名称

我在这里不喜欢的情况是,在每个 if 语句中都返回相同的变量(但结果不同)。

所以我的问题是有人对最终重构这个有更好的想法吗?在 if 语句中执行此操作是否有任何问题(从逻辑、干净的代码方面等)。

我所有的方法都有ref关键字(用于字符串变量名)。很抱歉造成混乱!

 private string GenerateNameFrom(IRow row)
 {
    string name = string.Empty;

    if (Method1(name,row))
        return name;
    else if (Method2(name,row))
        return name;
    else if (Method3(name,row))
        return name;
    else return "Null";
}

标签: c#if-statement

解决方案


这是一种方法:

private string GenerateNameFrom(IRow row)
{
    var name = "";
    return (Method1(ref name) || Method2(ref name) || Method3(ref name)) ? name : "Null";
}
  • 用于var实例化空字符串,不需要写string两次。
  • using||意味着第一个返回的方法true将满足条件,并且不会执行其他方法。
  • 使用?:运算符进行条件返回。

注意:正如 Matthew Watson 评论的那样,您可能缺少ref(orout关键字-因为即使字符串是引用类型,它也是不可变的,因此如果您希望您的方法影响name参数的内容,您必须将其发送为ref或 as out,因为更改它的值的唯一方法是为其分配一个新字符串。

(也转换String.Empty"",但这只是个人喜好)


推荐阅读