【问题标题】:convert variable to constant将变量转换为常量
【发布时间】:2014-11-14 07:01:03
【问题描述】:

Can 似乎很奇怪,但有没有办法将变量声明或转换为常量:

string myVariable = "MyString";
const string myConstant = myVariable ;

我需要这个来回答我的问题: linq to sql startwith performance indexed columns

谢谢

【问题讨论】:

  • 如果一个常量是真正的常量,为什么需要将它设置为一个变量?
  • "我可以为不固定的东西设置一个常量吗?"嗯……没有。
  • const 是编译时间常数,它需要一个编译时间常数值。也许您可以使用readonly 字段。
  • 相反,我想将变量转换为常量。强制实体生成 sql 选择存储过程。更多细节在这里:stackoverflow.com/questions/25931201/…
  • Answer you've linked 谈论表达式树,这篇文章谈论源代码......两者之间没有直接联系 - 所以这个问题可能与您真正寻找的内容无关...也许阅读 MSDN 上的 Expression.Constant 帮助将是提出新问题的良好起点。 (您可能应该只接受这个问题的答案,因为我相信对这个问题的任何真正改变都会把它变成完全不同的东西)。

标签: c# variables constants


【解决方案1】:

没有办法做到这一点 Const 常量值在编译时直接刻录到调用站点中,而是您可以将其设为 readonly 并在构造函数中分配它

类似

string myVariable = "MyString";
readonly  string myConstant="test" ; 
public MyClass()
{ 
myConstant= myVariable ;
}

【讨论】:

    【解决方案2】:

    不,您不能使用变量的值来初始化常量。

    常量必须在编译时就知道,而变量的值直到运行时才知道,这在概念上是不可能的。

    【讨论】:

      【解决方案3】:

      否则,请将您的第一个变量更改为如下所示的常量:

      const string myVariable = "MyString";
      const string myConstant = myVariable ;
      

      【讨论】:

        【解决方案4】:

        不,您不能使用变量来初始化字段。编译器可能会重新安排这些初始化的顺序,myConstant 可以先初始化,在这种情况下myVariable 不会被设置。

        【讨论】:

          【解决方案5】:

          常量不能变化,因为它们不是变量,将其设置为变量将改变它。所以答案是否定的,至少不是在运行时。

          也许您只是想要一些不能设置很多地方的东西,然后 readonly 可能会起作用。

          参考:http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx

          public readonly string _myROString = "set once";
          

          【讨论】:

          • 谢谢,但不适用于我的情况。 readonly 是我代码中的一个变量: readonly string search = "julien"; var list = db.Users.Where(x => x.Name.StartsWith(search));
          【解决方案6】:

          嗯是不可能的。但是有人找到了我最初问题的答案,而且没有常数。谢谢 linq to sql startwith performance indexed columns

          【讨论】:

            【解决方案7】:

            此答案没有为发布的问题提供解决方案;但是可以满足一些喜欢静态访问字符串需要附加其他字符串的观众的需求,

            public enum NameTypes
            {
                First, Last
            }
            
            public static class UserDetails
            {
                public static string NameText = "Name Info: " + NameTypes.First.ToString();
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-26
              • 1970-01-01
              • 1970-01-01
              • 2021-03-16
              相关资源
              最近更新 更多