Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 常量在方法中的使用_C#_.net - Fatal编程技术网

C# 常量在方法中的使用

C# 常量在方法中的使用,c#,.net,C#,.net,在下面的方法中 public void InspectList(IList<int> values) { if(values != null) { const string format = "Element At {0}"; foreach(int i in values) { Log(string.Format(format, i)); } } } 公共无效检查

在下面的方法中

public void InspectList(IList<int> values)
{
    if(values != null)
    {
        const string format = "Element At {0}";
        foreach(int i in values)
        {
            Log(string.Format(format, i));
        }
    }   
}
公共无效检查列表(IList值)
{
如果(值!=null)
{
const string format=“位于{0}的元素”;
foreach(值中的int i)
{
日志(string.Format(Format,i));
}
}   
}

与仅将字符串声明为字符串相比,const的使用是否有任何好处?它不会被拘留吗?

是的,在这两种情况下它都会被拘留


将其标记为
const
会使您的意思更清楚-
不要触摸此字符串变量,不要为其指定不同的值

以下是两种情况下最终代码的外观:

  • 使用常量:

    public void InspectList(IList<int> values)
    {
        if(values != null)
        {
            foreach(int i in values)
            {
                Log(string.Format("Element At {0}", i));
            }
        }   
    }
    
    公共无效检查列表(IList值)
    {
    如果(值!=null)
    {
    foreach(值中的int i)
    {
    Log(string.Format(“元素在{0}”,i));
    }
    }   
    }
    
  • 无常数:

    public void InspectList(IList<int> values)
    {
        if(values != null)
        {
            string format = "Element At {0}";
            foreach(int i in values)
            {
                Log(string.Format(format, i));
            }
        }   
    }
    
    公共无效检查列表(IList值)
    {
    如果(值!=null)
    {
    string format=“位于{0}的元素”;
    foreach(值中的int i)
    {
    日志(string.Format(Format,i));
    }
    }   
    }
    

因此,在第二种情况下,您将声明一个额外的局部变量,但差异将是微小的。

将常量声明为常量有多种原因。首先,它告诉任何读取代码的人,值将保持不变,udentifier只是值的别名。其次,优化器可以更轻松地确定标识符的值是否在两次读取之间发生了更改。声明it成本使这变得非常容易,因为它无法更改。对我来说,前者更重要。对我来说,编写清楚地表明意图的代码是开发人员可能拥有的最重要的习惯之一

这将取决于优化器。我猜当前的MS C#编译器将产生与您类似的结果,但我不确定编译IL代码后产生的二进制代码是否有任何差异