首页 > 解决方案 > 初始化变量并将其作为参数传递与在方法体中初始化

问题描述

在 C# 中,有谁知道是否这样做...

 public object Foo()
 {
    var command = new MyCommand(param1);
    return Myfunction(command);
 }

比这样做效率低(使用更多内存)?

 public object Foo()
 {
    return Myfunction(new MyCommand(param1));
 }

还是只是表面上的区别?似乎第一个选项会消耗更多内存,直到变量超出范围。我意识到任何差异都会非常小。另外,第二种语法有名称吗?排队?某物?谢谢!

标签: c#variables

解决方案


对于编译器来说,它是完全一样的。两者都将转换为相同的 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);
    }
 }

推荐阅读