c# - 在不同条件下更改相同值时重构 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";
}
解决方案
这是一种方法:
private string GenerateNameFrom(IRow row)
{
var name = "";
return (Method1(ref name) || Method2(ref name) || Method3(ref name)) ? name : "Null";
}
注意:正如 Matthew Watson 评论的那样,您可能缺少ref
(orout
关键字-因为即使字符串是引用类型,它也是不可变的,因此如果您希望您的方法影响name
参数的内容,您必须将其发送为ref
或 as out
,因为更改它的值的唯一方法是为其分配一个新字符串。
(也转换String.Empty
为""
,但这只是个人喜好)
推荐阅读
- c# - 在 DataGridView 中搜索,如何在过滤后的行中进行过滤
- android - 如何在 android 上以低延迟播放 RTSP 流?
- node.js - 将请求 localhost3000 代理到 http://localhost:5000/ 时发生错误 [ECONNREFUSED]
- react-native - React Native useState 性能问题
- arrays - 如何防止 arrayformula 填充空行(Google Sheets/Excel)
- javascript - 如何使用 date-fns 获取给定日期的最近日期?
- node.js - 如何使用 node.js 处理身份验证标头?
- oauth-2.0 - 刷新令牌如何为 jwt 添加安全性?
- python - 在 Azure 上阻止 urllib 的 Python/Django 应用程序
- flutter - 在 AppBar 操作中溢出的 Flutter ToggleButtons