먼저해야 할 일은 클래스 정의가 수행하는 것처럼 명시 적으로 명명 된 속성에 문자열을 저장하지 않는 것입니다. 가장 적절한 시나리오는 List < 문자열 > 인 것처럼 보이며 클래스에 모두 들어갈 수 있습니다. 이것은 이미 귀하의 목록을 갈 준비가되어 있음을 의미합니다.
그렇다면 클래스를 변경하거나 JSON 피드를 허용하는 다른 클래스를 사용하고 명시 적으로 120 개의 속성을 설정하는 대신 List < 문자열 > 유형의 속성에 .Add()를 사용하면됩니다. 이처럼
: 다음
public class ArtistData
{
public List<string> Artists{ get; set; }
public ArtistData()
{
this.Artists = new List<string>(0);
}
public void PopulateArtists(string jsonFeed)
{
// here something desrializes your JSON, allowing you to extract the artists...
// here you would be populating the Artists property by adding them to the list in a loop...
}
}
, 당신은 속성 연예인 목록을 가지고 있고, 직접 목록을 사용하거나 수행하여 그것을 반환 할 수 있습니다 그러나
string[] artists = myInstance.Artists.ToArray();
, 당신은에 보인다 그들이 결국 당신이 우리에게 보여준 수업에서 당신에게 개인의 재산으로 봉사 한 사실을 바꿀 수 없다는 것을 나타 냈습니다. ...
당신이 선택하지 않았지만 당신이 보여준 것과 같은 수업에서 시작한다고 가정하십시오. , 여기있다.
// this will return a list of the values contained in the properties...
public List<string> GetListFromProperties<T>(T instance)
{
Type t = typeof(T);
PropertyInfo[] props = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
// As a simple list...
List<string> artists = new List<string>(props.Length);
for (int i = 0; i < props.Length; i++)
{
if(!props[i].Name.Contains("_artist")){ continue; }
artists.Add(props[i].GetValue(instance, null).ToString());
}
return artists;
}
// this will return a dictionary which has each artist stored
// under a key which is the name of the property the artist was in.
public Dictionary<string,string> GetDictionaryFromProperties<T>(T instance)
{
Type t = typeof(T);
PropertyInfo[] props = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
// As a dictionary...
Dictionary<string,string> artists = new Dictionary<string,string>(props.Length);
for (int i = 0; i < props.Length; i++)
{
if(artists.ContainsKey(props[i].Name) || !props[i].Name.Contains("_artist")){ continue; }
artists.Add(props[i].Name, props[i].GetValue(instance, null).ToString());
}
return artists;
}
: 당신이해야합니다 모든 것을, 요구대로 당신이 모든 값을 통해 루프를 할 수있는 방법은, 각이 필요로하는 하나 개의 매개 변수로 아래의 방법 중 하나에 클래스의 인스턴스를 전달한다는 것입니다
하나의 도움을 주어야하지만 사전을 사용하지 마십시오. 각 아티스트의 이름을 알 필요가 없다면 더 많은 오버 헤드가 필요하므로 간단한 목록보다 도움이됩니다.
덧붙여 말하자면,이 메서드는 generic 타입이므로 T 타입의 매개 변수를 받아들이므로 현재 고민하고있는 클래스 인스턴스가 아닌 동일한 메서드가 모든 클래스 인스턴스에서 작동합니다.
기억해 : 순간적으로 당신에게 매우 편리하게 보일지 모르지만, 이것이 반드시 이것에 접근하는 최선의 방법은 아닙니다.이것보다 더 나은 것은 클래스를 다시 작업하기 위해 내가했던 초기 제안 일 것이므로 이런 종류의 일은 필요하지 않습니다.
정말 이상한 클래스입니다. 목록으로 변경할 수 있습니까? –
문자열을 설정하는 방법을 보여줍니다. 나는 그들을 IEnumerable을 구현하는 무언가에 저장하는 방법이 있다고 확신한다. – Erix
내 대답은 루프를 건너 뛰고 이름으로 속성에 직접 액세스하는 것입니다. 이것은 아마 당신이 묘사하고있는 문제에 대한 좋은 생각이 아니지만 제공된 정보로는 말할 수 없습니다. 반사는 일반적으로 성능 문제로 인해 좋은 생각이 아닙니다. foreach 루프에서 수행하는 작업과 같이 더 많은 정보를 제공 할 수 있다면 더 나은 답변을 얻을 수 있습니다. – Trisped