为什么ValueTuple不能为const?

时间:2019-04-21 20:10:36

标签: c# valuetuple c#-7.3

声明为字段的ValueTuple类型可以是可变的:

class Foo {
  (int, int) bar = (0, 1);
}

或只读:

class Foo {
  readonly (int, int) bar = (0, 1);
}

,并且此(im)可变性适用于每个成员。我希望它也可以扩展到const声明:

class Foo {
  const (int, int) bar = (0, 1);
}

但是此语句无法编译。 在某些情况下,它是不受欢迎的功能,还是只是没有实现?

编辑 好的我现在明白了。我的问题基于这样一个假设:就关键字readonly而言,C#编译器对待ValueTuples的方式与其他类型不同。因此,如果已经是一个异常,为什么不为const另一个异常。但是,实际上,这种逻辑似乎适用于所有结构。所以这行不通:

class Foo {
  readonly ExampleStruct field;
  void Method() {
    field.structField = 2;
  }
}
struct ExampleStruct {
  public int structField;
}

1 个答案:

答案 0 :(得分:4)

类型有限,可以在c#(more detailed here)中用作const。

Value tuple根本不在其中。