Именно так должен работать ваш код.
Вы пишете 31
с количество времени, которое количество элементов в expend
составляет. Попробуйте отрисовать dummyData
с помощью expend = []
Вот код с фиксированной логикой и фиксированными ключами https://codesandbox.io/s/88k5ynyqy9
Я считаю, что наличие нескольких файлов конфигурации для каждой среды работает хорошо. Например:
Затем я делаю ссылку на «основную» версию этого файла, используя встроенный атрибут configSource в файле web.config или app.config, например
<appSettings configSource="config\endpoints.xml"/>
. Затем я использую процесс сборки или развертывания для копирования правильная конфигурация для среды вплоть до имени, которого ожидает web.config.
Каждая среда четко помечена и контролируется без использования запутанных заполнителей.
Один из способов - сохранить 3 разных файла конфигурации и выбрать их через MSBuild при развертывании.
<Choose>
<When Condition="$(BuildEnvironment) == 'debug'">
<PropertyGroup>
<ConfigFile>debug.config</ConfigFile>
</PropertyGroup>
</When>
<When Condition="$(BuildEnvironment) == 'test'">
<PropertyGroup>
<ConfigFile>test.config</ConfigFile>
</PropertyGroup>
</When>
<When Condition="$(BuildEnvironment) == 'prod'">
<PropertyGroup>
<ConfigFile>prod.config</ConfigFile>
</PropertyGroup>
</When>
</Choose>
Используя задачу MSBuild, вы можете переименовать и переместить конкретный файл конфигурации в нужное место.
Все еще несколько громоздко, у этого есть дополнительное преимущество - перейти к одношаговой сборке .
Yet another option: switch to storing your application configuration in a database. I keep the type values in a database, so that management of these settings is more centralized. Then my config file has a connection string that is dedicated just for Config, and it has just two keys: a unique application ID value, and the config version (i.e. "dev", "test", etc.). Then I just deploy the right config file to the right environment.
That may not be exactly what you're looking for; it is an alternative for facilitating management of your config data.
Ваш первый пример - это стандартный синтаксис языка для инициализации массива целых чисел. Значение слева оценивается как int []. Во втором примере вы пытаетесь присвоить int [] для List
Как говорит @Patrik, это не сработает для LinkedList, потому что он не определяет метод Add () как часть своего интерфейса (существует явная реализация ICollection. Возможно, вы можете сделать это в сценарии предварительной сборки; замена файла конфигурации на основе переменной env имя_конфигурации.
Используйте предварительно скомпилированные директивы. Пример кода:
String configFile = String.Empty;
#if Debug
configFile = @"debug.config";
#elif Test
configFile = @"test.config";
#elif Prod
configFile = @"prod.config";
#endif
Load(configFile);
Где методом загрузки загружен файл конфигурации.
Проблема, которую я имею с ответом Сианя, - то, что, если Вы добавляете новую установку/конечную точку конфигурации, необходимо не забыть делать это через несколько файлов. Если Вы забудете делать таким образом, то Вы только узнаете, когда Вы развернетесь к затронутой среде (не хороший).
Вместо этого у Вас могла быть одна основная конфигурация, и использующий regex/xmlpoke (nant) / [your-favorite-text-manipulator] для массирования файл в создают/развертывают время для вставки правильных значений для каждой среды, сохраняя настройки для всех сред в другом файле (но кардинально все вместе).
Затем только необходимо поддержать один файл конфигурации и файл параметров среды - я думаю, что это делает обслуживание легче и более ясным в долгосрочной перспективе.
Мы используем несколько разных методов.
Environment.MachineName.config (для пользователей)
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
if (System.IO.File.Exists(String.Format("./{0}.config", Environment.MachineName)))
fileMap.ExeConfigFilename = String.Format(@"./{0}.config", Environment.MachineName);
else
fileMap.ExeConfigFilename = "live.config";
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);
#IF DEBUG debug.config
#IF TEST test.config
#IF PROD prod.config
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
#if (DEBUG)
fileMap.ExeConfigFilename = "./debug.config";
#elif (TEST)
fileMap.ExeConfigFilename = "./test.config";
#else
fileMap.ExeConfigFilename = "./production.config";
#endif
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);
Хотя это может быть утомительным.