Допустим, у меня есть объект MyCharacter
класса Character
, который обладает следующими свойствами: Health
, Mana
, MoveSpeed
.
Из другого метода я получаю строку, которая содержит эти статистические данные, следующим образом:
"Health: 100 Mana: 100 MoveSpeed: 100"
Теперь я хочу присвоить эту статистику моему объекту. Моя текущая попытка:Присвоить значения объекта в цикл
// stats is the string I showed above
var statsArray = stats.Split(' ');
for (var i = 0; i < statsArray.Length; i++)
{
switch(statsArray[i])
{
default:
break;
case "Health:":
MyCharacter.Health = statsArray[i+1];
break;
case "Mana:":
MyCharacter.Mana = statsArray[i+1];
break;
case "MoveSpeed:":
MyCharacter.MoveSpeed = statsArray[i+1];
break;
}
}
Дело в том, что я знаю порядок статистики. Это всегда Здоровье, затем Мана, затем MoveSpeed. Поэтому я ищу способ упростить его, а именно избавиться от этого switch
(так как фактический Character
здесь имеет 18 характеристик, и это не совсем так хорошо, как есть).
Моя идея будет проходить через массив и сообщит программе, чтобы назначить первое число, которое он находит для Здоровья, второе - Мане, а третье - MoveSpeed.
Возможно ли что-нибудь подобное?
ли вы теперь имеете любую заботу/производительность/ошибку на Переключатель случай? почему вы хотели бы изменить? Если нет, для меня я бы предпочел использовать коммутатор, проще для отладки и чтения. – User2012384
Если вы знаете правильный порядок, то почему в нем есть метки? Есть ли причина не иметь, например, '100,100,100'? – Luaan
Единственный способ, которым вы сможете динамически загружать в свойства, не зная, что их имена впереди, - [использовать отражение (с соответствующим увеличением производительности и увеличением сложности)] (http://stackoverflow.com/questions/771524/how -slow-это-отражение). TBH Я не вижу ничего плохого в том, как это происходит сейчас. [Любой дурак может написать код, который компьютер может понять. Хорошие программисты пишут код, который люди могут понять] (http: // stackoverflow.com/questions/522828/is-code-for-computers-or-for-people) – Liam