Как получить имя себя в объявлении поля в c#

#c# #.net-core

Вопрос:

Что у меня есть:

Я объявляю большое количество полей, большинству из которых присваивается собственное имя в качестве строкового значения. Что-то вроде

 string ErrorCode0001 = "ErrorCode0001-C";
string ErrorCode0002 = "ErrorCode0002";
string ErrorCode0003 = "ErrorCode0003";
string ErrorCode0004 = "ErrorCode0004";
string ErrorCode0005 = "ErrorCode0005";
string ErrorCode0006 = "ErrorCode0001";
 

Теперь, если вы обратите внимание на приведенный выше код , в котором я допустил ошибку ErrorCode0006 , которую трудно заметить.

Ошибка выше произошла из-за того, что я скопировал объявление первого поля, а затем просто изменил номер суффикса, пропустив его в последнем поле.

То, что я хотел бы иметь:

Я бы с удовольствием написал что-нибудь вроде

 string ErrorCode0001 = $"{nameof(self)}-C";
string ErrorCode0002 = $"{nameof(self)}";
string ErrorCode0003 = $"{nameof(self)}";
string ErrorCode0004 = $"{nameof(self)}";
string ErrorCode0005 = $"{nameof(self)}";
string ErrorCode0006 = $"{nameof(self)}";
 

но я не уверен, как это сделать в C#.

Хотелось бы увидеть здесь несколько умных предложений.

Ответ №1:

Одним из способов достижения этой цели было бы использование атрибута CallerMemberName.

Для этого вы определяете такой метод, как:

 private static String GetName([CallerMemberName] string fieldName = "")
            => fieldName;
 

который при вызове без параметров вернет имя вызывающего участника (поле в вашем случае!).

Ты используешь его как:

 public static readonly string KPT1_0001 = $"{GetName()}-C";
public static readonly string KPT1_0002 = $"{GetName()}";
public static readonly string KPT1_0003 = $"{GetName()}";
public static readonly string KPT1_0004 = $"{GetName()}";
public static readonly string KPT1_0005 = $"{GetName()}";
public static readonly string KPT1_0006 = $"{GetName()}";

private static String GetName([CallerMemberName] string fieldName = "")
    => fieldName;