Получить значения из файла конфигурации на основе переменной

У меня есть приложение С#, которое использует файл конфигурации для доступа к значениям. Я хочу получить значения из этого файла конфигурации на основе значения переменной.

Вот файл конфигурации:

<appsettings>
    <add key="1" value="10"/>
    <add key="2" value="20"/>
    <add key="3" value="30"/>
    <add key="4" value="40"/>
    <add key="5" value="40"/>
    <add key="6" value="60"/>
    <add key="7" value="70"/>
    <add key="8" value="80"/>
    <add key="9" value="90"/>
</appsettings>

Я объявил переменную в своей программе, которая представляет число дня месяца.

int  intCurDay = DateTime.Now.Day;

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

int valueToUse = Convert.ToInt32(ConfigurationManager.AppSettings["{0}"],intCurDay)
int valueToUse = Convert.ToInt32(ConfigurationManager.AppSettings["\"" + intCurDay + "\"")

person Jt2ouan    schedule 06.08.2013    source источник


Ответы (2)


Это должно работать:

int valueToUse = Convert.ToInt32(ConfigurationManager.AppSettings[intCurDay.ToString()]);

Другие методы (не рекомендуется — просто чтобы вы видели, где ваши первые попытки пошли не так):

int valueToUse = Convert.ToInt32(ConfigurationManager.AppSettings[string.Format("{0}",intCurDay)]);

int valueToUse = Convert.ToInt32(ConfigurationManager.AppSettings["" + intCurDay + ""])
person D Stanley    schedule 06.08.2013
comment
Вам не хватает ] в последней строке. - person Khan; 06.08.2013
comment
+1 Показывать не рекомендую, а тем более за редактирование исходного поста. Часть AppSettings запускала мое обсессивно-компульсивное расстройство. :) - person Khan; 06.08.2013
comment
это сработало, я даже не подумал просто вставить это прямо в скобки. Думал, что мне нужны двойные кавычки, из-за которых мне пришлось их избегать. - person Jt2ouan; 06.08.2013

Я не знаю с ключами, но для получения переменных из файла App.config лучше использовать этот способ, System.Configuration.ConfigurationManager.AppSettings устарел:

<applicationSettings>
  <nameOfNamespace.nameOfSettingsFile>
    <setting name="MAX_TRIES" serializeAs="String">
      <value>5</value>
    </setting>
  </nameOfNamespace.nameOfSettingsFile>
</applicationSettings>

Вы можете создать файл .settings в VS, добавив в проект новый элемент и выбрав файл настроек (его вид - шестеренка) и создать переменные там, а не в файле App.config.

Тогда вы можете легко использовать это:

int MAX_TRIES = nameOfNamespace.nameOfSettingsFile.Default.MAX_TRIES;
person Wolfman    schedule 24.07.2014