Почему ValueTuple не может быть постоянным? - PullRequest
4 голосов
/ 21 апреля 2019

Типы ValueTuple, объявленные как поля, могут быть изменяемыми:

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

или только для чтения:

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

и эта изменчивость применяется к каждому члену. Я ожидал бы, что это будет также распространено на объявления const:

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

Но это утверждение не компилируется. Есть ли определенный случай, когда это нежелательная функция или просто что-то не реализовано?

EDIT Хорошо, сейчас я понимаю. Мой вопрос был основан на предположении, что компилятор C # обрабатывает ValueTuples иначе, чем другие типы, в отношении ключевого слова только для чтения. Итак, если это уже исключение, почему бы не сделать еще одно исключение для супругов. Но на самом деле эта логика, кажется, применима ко всем структурам. Так что это не сработает:

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

1 Ответ

4 голосов
/ 21 апреля 2019

Существует ограниченный набор типов, которые можно использовать как const в c # ( более подробно здесь ).

Значение кортежа просто не входит в их число.

...