Статическая строковая интерполяция - PullRequest
0 голосов
/ 02 января 2019
public static class SomeRegexConsts
{
    public static readonly string FullName = $"{Name} {Surname}";

    private static readonly string Name = "[A-Z][a-z]+";

    private static readonly string Surname = "[A-Z][a-z]+";
}

В приведенном выше примере FullName будет равно " " во время выполнения.Это связано с тем, как статические поля инициализируются (сверху вниз).

В общем, я не вижу другого решения, кроме:

public static string FullName => $"{Name} {Surname}";

Любые идеи, как улучшить этот кодпоскольку мне не нравится эта лямбда, и перемещение FullName ниже Name и Surname не вариант, так как StyleCop не позволит мне сделать это.

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Как насчет создания открытого метода, который возвращает строку FullName?

public string getFullname()
{
    return $"{Name} {Surname}";
}

Таким образом, public static readonly string FullName = $"{Name} {Surname}";, если можно от него избавиться, больше не понадобится.

0 голосов
/ 02 января 2019

Я считаю, что это будет работать с StyleCop, так как для него требуется const перед полями любого типа:

public static class SomeRegexConsts
{
    private const string Name = "[A-Z][a-z]+";
    private const string Surname = "[A-Z][a-z]+";

    public static readonly string FullName = $"{Name} {Surname}";

}

, если только вы не используете отражение внутри класса, для которого требуется неконстантное поле, скомпилированноекод не должен быть затронут.

0 голосов
/ 02 января 2019

Если вы не хотите двигаться FullName ниже других, я думаю, что это единственное решение для вас.

public static class SomeRegexConsts
{
    static SomeRegexConsts(){
        FullName = $"{Name} {Surname}";
    }

    public static readonly string FullName;

    private static readonly string Name = "[A-Z][a-z]+";

    private static readonly string Surname = "[A-Z][a-z]+";
...