2015-06-17 6 views
1

Я пытаюсь ссылаться на переменную из App.config в моем файле C#. Вот пример моего кода.Нельзя ссылаться на переменную из App.config

App.config:

<appSettings> 
    <add key="ErrorEmails" value="[email protected]"/> 
</appSettings> 

Код:

SettingsIO setIO = new SettingsIO(); 
public static string To = setIO.ReadSetting("ErrorEmails"); 

Ошибка гласит:

Поле инициализатор не может ссылаться на нестатический поле, метод , или preperty 'test.setIO'.

Должен ли я использовать функцию GET? Что я делаю не так?

+3

'Должен ли я использовать функцию GET?' Похоже, вы уже ответили на свой вопрос. – Servy

+2

Вы не видите контекста, но 'setIO' представляется членом экземпляра, а' To' является членом 'static'. Вы не можете ссылаться на 'setIO' в' static' метод или член (то есть именно то, что сообщение об ошибке), потому что у вас нет экземпляра объекта. – crashmstr

+0

'public static string To = new SettingsIO(). ReadSetting (" ErrorEmails ");'? – abatishchev

ответ

3

Используйте класс system.configuration.

string str = System.Configuration.ConfigurationManager 
           .AppSettings["someAppSetting"] 
           .ToString(); 
+4

Похоже, что 'SettingsIO' - это его собственный класс, который обертывает это поведение. – Servy

1

С текстом ошибки я думаю, что линии вы показываете некоторые члены класса декларации, то есть код выглядит следующим образом:

class MyAwesomeClass 
{ 
    SettingsIO setIO = new SettingsIO(); 
    public static string To = setIO.ReadSetting("ErrorEmails"); 
} 

Пожалуйста, обратите внимание, что To является статическим членом, в то время как setIO не является.

Сообщение об ошибке довольно ясно говорит вам, что вы не можете ссылаться на нестатический член для инициализации члена. Статические элементы создаются во время запуска программы, а нестатические - создаются только при создании экземпляра вашего класса, поэтому нет способа доступа к нестационарным членам, когда нет экземпляра вашего класса.

Для того, чтобы заставить его работать, вы должны сделать оба члена статическим (Это не будет работать, если вы сделаете так, не статичны, но вы можете инициализировать их в конструкторе класса, а не в этом случае):

class MyAwesomeClass 
{ 
    static SettingsIO setIO = new SettingsIO(); 
    public static string To = setIO.ReadSetting("ErrorEmails"); 
} 

или

class MyAwesomeClass 
{ 
    SettingsIO setIO; 
    public string To {get; private set; } // don't make members public, use auto-properties instead 

    public MyAwesomeClass 
    { 
     setIO = new SettingsIO(); 
     To = setIO.ReadSetting("ErrorEmails"); 
    } 
} 
Смежные вопросы