Начиная с C # 6, вы можете написать это как:
public static string[] Titles => new string[] { "German", "Spanish", "Corrects", "Wrongs" };
См. Также: C #: новый и улучшенный C # 6.0 (в частности, глава «Функции и свойства, связанные с выражением»)
Это создаст статическое свойство только для чтения, но все равно позволит вам изменять содержимое возвращаемого массива, но при повторном вызове свойства вы снова получите исходный неизмененный массив.
Для пояснения, этот код такой же (или фактически сокращение):
public static string[] Titles
{
get { return new string[] { "German", "Spanish", "Corrects", "Wrongs" }; }
}
Обратите внимание, что у этого подхода есть и обратная сторона: новый массив фактически создается для каждой ссылки, поэтому, если вы используете очень большой массив, это может быть не самым эффективным решением.
Но если вы повторно используете тот же массив (например, поместив его в закрытый атрибут), он снова откроет возможность изменить содержимое массива.
Если вы хотите иметь неизменяемый массив (или список), вы также можете использовать:
public static IReadOnlyList<string> Titles { get; } = new string[] { "German", "Spanish", "Corrects", "Wrongs" };
Но это по-прежнему сопряжено с риском для изменений, поскольку вы все равно можете привести его обратно к строке [] и изменить содержимое следующим образом:
((string[]) Titles)[1] = "French";