【问题标题】:How to make a variable able to be set only once in C#? [duplicate]如何使变量只能在 C# 中设置一次? [复制]
【发布时间】:2020-11-07 07:51:10
【问题描述】:

我想声明一个变量,稍后再赋值,但我希望变量能够被赋值一次。

readonly 关键字不这样做。文档说:

对该字段的赋值只能作为声明的一部分或在同一类的构造函数中进行。

const 关键字也不这样做。
那么如何让一个变量只能设置一次呢? 提前致谢!

【问题讨论】:

  • 使用可以为空的属性,设置器只会设置一个值为空的值
  • “只能设置一次”是什么意思?如果有人尝试多次设置它,你希望发生什么?编译时错误?例外?无操作?没有这些信息,就不可能回答。另请注意,到目前为止,这两个答案都是关于 properties,它们不是变量。你真的对房产感兴趣吗?
  • 如果有人尝试多次设置它,那么它不会做任何事情。

标签: c# variables


【解决方案1】:

你可以像这样使用一个私有的可为空的变量,这样_myVar只有一次获得值

   private bool? _myVar = null;
    public bool? MyVar
    {
        set { if (_myVar == null) _myVar = value; }
        get { return _myVar; }
    }

【讨论】:

    【解决方案2】:

    为此,首先您必须创建一个 bool 变量,告诉您该变量是否已设置:

    bool isSet;
    

    然后,当您希望只能设置一次的变量被设置时,我们使该变量为真。

    private int exampleVar
    public int ExampleVar {
        get {
            return exampleVar; 
        }
        set {
            if(isSet) {
                exampleVar = value;
            }
        }
    }
    

    请注意,如果此变量在设置之前被访问,则返回 null。
    要修复它,请将 get{} 中的所有内容替换为:

    if(isSet) {
        return exampleVar; 
    }
    return /* insert placeholder variable here */;
    

    如果exampleVarExampleVar 是另一种类型的变量,例如float,这也有效。

    【讨论】:

    • 所以你写了这个问题,写了一个错误的答案,然后很快就提交了?目的是什么?
    • 也许他的名字NOT_A_ROBOT是个谎言?
    • 属性不是变量...所以不是答案。即使关于财产建议的问题也不完整并且比现有答案更糟糕。请确保在提问之前搜索类似的问题并为事物使用专有名称。
    • 我正在回答我自己的问题,stackoverflow 说他们鼓励这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多