2016-08-26 1 views
3

을 제공하여 재산을 얻으려는 데 도움이 될 수 있기를 바랍니다. 다음 클래스 hierachy가 주어진다 :이 특정 질문에 대해 몇 시간 동안 찾고있는 문자열 이름

public class Toon 
{ 
public Skillset skillset; 

public Toon() 
{ 

    skillset = new Skillset(); 
} 
} 

public class Skillset 
{ 
    public Skill Fight; 
    public Skill Trade; 
    public Skill Talk; 


    public Skillset() 
    { 
     Fight = new Skill() { name = "Fight", value = 10 }; 
     Trade = new Skill() { name = "Trade", value = 12 }; 
     Talk = new Skill() { name = "Talk", value = 15 }; 
    } 

} 

public class Skill 
{ 
    public string Name; 
    public int Value; 
    public int Rank 

} 

이 Toon.Skillset.Fight 등의 구문을 제공하는 것입니다

이제

질문 : 나는 그들이 경우 무작위로, 기술을 향상 할 수 있도록하려면 목록 인 즐겨 찾기 목록에 있습니다. 그래서 basicly

:

public void setSkill(string skillname, Toon toon, int value) 
{ 
    => get property and set it to value 
} 

그래서

setSkill는 ("싸움", NewToon, 30); Toon을 설정합니다 .Killset.30으로 경기하십시오.

나는 분명히 설명 할 수 있으면 좋겠다. 나는 어떤 입력에 대해서도 감사하고 싶다. 이 문제를 멋지게 해결하기 위해 Reflection을 들었지만 아직 답변을 찾지 못했습니다.

추 신 : Toon에서 List를 얻는 것이 도움이되지 않습니다. 구문을 파괴합니다.

+4

사실, 속성에는 클래스가 아니라 필드가 있습니다. – LarsTech

+1

인덱서 만 사용할 수 있습니다. 공공 스킬이 [캐릭터 이름] { 의 get { 스위치 (이름) { 경우 "싸움" 반환 싸움; 경우 "무역": 반품 무역; 사례 "토론": return 토론; 기본값 : return null; } } } –

+0

사실, 아직 최종 모델에는 약 30 개의 필드가 있으므로 그럴 것 같지 않습니다. 제공되는 몇 가지 필드가 있더라도 당연합니다. – Ceron

답변

1

당신은 반사 사용할 수 있습니다

public void setSkill(string skillname, Toon toon, int value) 
{ 
    var field = typeof(Skillset).GetField(skillname); 
    var skill = (Skill)field.GetValue(toon.skillset); 

    skill.Value = value; 
} 

을하지만, 이것은 가장 성능이 해결책은 아니다. 으로 Dictionary<string, Skill>을 사용하는 것이 좋습니다.

+0

@IvanStoev 죄송합니다. 나는 지금 그것을 고쳤다. – Xiaoy312

관련 문제