无法从App.config引用变量

时间:2015-06-17 16:21:01

标签: c# compiler-errors app-config

我试图在我的C#文件中引用App.config中的变量。这是我的代码示例。

App.config中:

<appSettings>
    <add key="ErrorEmails" value="fakeCompany@fakeCompany.com"/>
</appSettings> 

代码:

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

错误如下:

  

字段初始值设定项不能引用非静态字段,方法或属性&#39; test.setIO&#39;。

我应该使用GET功能吗?我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用system.configuration类。

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

答案 1 :(得分: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");
    }
}