c# - 初始化变量并将其作为参数传递与在方法体中初始化
问题描述
在 C# 中,有谁知道是否这样做...
public object Foo()
{
var command = new MyCommand(param1);
return Myfunction(command);
}
比这样做效率低(使用更多内存)?
public object Foo()
{
return Myfunction(new MyCommand(param1));
}
还是只是表面上的区别?似乎第一个选项会消耗更多内存,直到变量超出范围。我意识到任何差异都会非常小。另外,第二种语法有名称吗?排队?某物?谢谢!
解决方案
对于编译器来说,它是完全一样的。两者都将转换为相同的 IL 代码。
要记住两件事。
首先,您的代码的可读性如何?使用单个变量看起来不错,但是如果您传入多个变量或执行嵌套函数调用,会发生什么return Myfunction(new MyCommand(MyOtherFunction(MyThirdFunction(param1))));
?从技术上讲,这是正确的,但它使阅读和理解变得更加困难。
其次,调试有多容易?如果你command
是会发生什么null
。你需要检查它,如果是,在哪里?基于param1
,您可能不知道该命令的值,直到您的代码更进一步,所以如果出现问题,可能更难找到在哪里。
public object Foo()
{
var command = new MyCommand(param1); // what happens if param1 is invalid?
if (command != null) // yes, this can be done on one line
{
return MyFunction(command);
}
else
{
throw new ArgumentException("Bad command"), ex);
}
}
推荐阅读
- excel - 从数据透视表字段中获取 MDX - Excel
- python - 从模型 django 中获取用户的用户名
- google-app-engine - 推荐的 GCP 蓝绿部署模式?
- xslt - 使用带有流的 XSLT 转换文档后计数元素
- python - 如何对 ValidationError 进行单元测试并断言使用了正确的代码?
- android - 设置 onConflict 策略时 RoomDB 插入卡住
- dialogflow-es - DialogFlow 中的内联编辑器错误“无法读取未定义的属性‘参数’”
- android - 什么是“网络流量出口 GAE/Firebase 存储”是指
- php - 使用修剪从php中字符串的开头和结尾删除新行
- java - 将日期作为 varchar 传递给 SQL Server 中的存储过程