Powiedzmy mam obiektu MyCharacter
klasy Character
, który ma następujące właściwości: Health
, Mana
, MoveSpeed
.
Z innej metody otrzymuję ciąg znaków, który zawiera następujące statystyki:
"Health: 100 Mana: 100 MoveSpeed: 100"
Teraz chcę przypisać te statystyki do mojego obiektu. Moja obecna próba jest następująca:wartości przypisać do obiektu w pętli for
// 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;
}
}
Chodzi o to, że znam kolejność statystyk. To zawsze Zdrowie, potem Mana, potem MoveSpeed. Tak więc szukam sposobu na uproszczenie go, a mianowicie pozbycie się tego switch
(ponieważ rzeczywisty Character
ma tutaj 18 statystyk i nie wygląda dokładnie tak dobrze, jak jest).
Mój pomysł będzie przebiegał przez tablicę i kazał programowi przypisać pierwszy znaleziony numer do Zdrowia, drugi do Many, a trzeci do MoveSpeed.
Czy coś takiego jest możliwe?
Czy teraz masz żadnych obaw/performance/błąd na użyciu przełącznika przypadek? dlaczego chciałbyś zmienić? Jeśli nie, to wolałbym używać przełącznika, łatwiej jest debugować i czytać. – User2012384
Jeśli znasz poprawną kolejność, dlaczego etykiety są na pierwszym miejscu? Czy istnieje powód, aby nie mieć np. '100,100,100'? – Luaan
Jedynym sposobem, w jaki można dynamicznie wczytać się do właściwości bez znajomości ich nazw z góry, jest [użyj odbicia (wraz z odpowiednim wzrostem wydajności i zwiększeniem złożoności)] (http://stackoverflow.com/questions/771524/how -slow-is-reflection). TBH Nie widzę nic złego w tym, jak to jest teraz. [Każdy głupek może napisać kod, który komputer może zrozumieć. Dobrzy programiści piszą kod, który ludzie mogą zrozumieć] (http: // stackoverflow.com/questions/522828/is-code-for-computers-or-for-people) – Liam