2017-01-16 1 views
0

현재 목록이 있고 물결이 중간에 있습니다. 조건이 충족되면 데이터를 지 웁니다 (foreach를 참조하십시오).물결 모양의 물체 속성을 반복하고 조건이 충족되면 업데이트하십시오.

현재 코드가 아니라 내가 원하는 정말 무엇을, 난 강력가

public class ViewCommonItemVM 
{ 
    public string Name { get; set; } 
    public List<string> Data { get; set; } 
    public string Bullet { get; set; } 

    public ViewCommonItemVM() 
    { 
     Data = new List<string>(); 
    } 
} 


List<ViewCommonItemVM> commons = new List<ViewCommonItemVM>(); 

commons.Add(new ViewCommonItemVM { Name = "Projects", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Companies", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Schools", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Hobbies", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Locations", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Interests", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Stuff", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Things", Data = someListHere }); 
commons.Add(new ViewCommonItemVM { Name = "Somelist", Data = someListHere }); 

foreach (var common in commons.Where(c => c.Data.Count != 0)) 
{ 
    count++; 
    if (count > 4 && common.Data.Count != 0) 
     common.Data.Clear(); 
} 

를 입력 사용하고자하지만 난 그렇게

의 stronly 입력 혜택 싶어 싶어

개체

public class ViewCommonVm 
{ 
    public ViewCommonItemVM Projects {get;set;} 
    public ViewCommonItemVM Companies {get;set;} 
    public ViewCommonItemVM Schools {get;set;} 
    public ViewCommonItemVM Hobbies {get;set;} 
    public ViewCommonItemVM Locations {get;set;} 
    public ViewCommonItemVM Interests {get;set;} 
    public ViewCommonItemVM Stuff {get;set;} 
    public ViewCommonItemVM Things {get;set;} 
    public ViewCommonItemVM Somelist {get;set;} 
} 

public class ViewCommonItemVM 
{ 
    public string Name { get; set; } 
    public List<string> Data { get; set; } 
    public string Bullet { get; set; } 
} 


// Here it should iterated trough the object, and after 
// 4 lenght properties != 0, clear the property list 

아이디어를 얻으려면 어떻게해야합니까?

+0

개체에서 속성을 제거 하시겠습니까? 아니면 조건이 충족되면 목록에서 모든 항목을 제거 하시겠습니까? 두 번째 인 경우 반복 할 때 목록에서 항목을 제거 할 수 없으므로 다음과 같이 할 수 있습니다. var count = 0; foreach (var는 commons.Where (c => c.Data.Count! = 0)에서 공통) { count ++; } if (count> 4 && common.Data.Count! = 0) commons.Clear(); – Kadaj

+0

@Kadaj, 목록을 사용하고 싶지 않습니다. –

+1

[Type.GetProperties] [1] 지정된 유형의 각 속성을 나열합니다. 그런 다음 [PropertyInfo.GetValue] [2]를 사용하여 값을 확인하십시오. [1] : http://msdn.microsoft.com/en-us/library/system.type.getproperties.aspx [2] : http://msdn.microsoft.com/en-us/library /b05d59ty.aspx – Kadaj

답변

0

이 문제를 해결하기 위해 linq를 사용할 수 있습니까? 원본보다

  void MyClear() 
     { 
      int count = 0; 
      foreach (System.Reflection.PropertyInfo item in typeof(ViewCommonVm).GetProperties()) 
      { 
       ViewCommonItemVM common = (ViewCommonItemVM)item.GetValue(this); 
       if (common.Data.Count() != 0) 
       { 
        count++; 
        if (count > 4 && common.Data.Count != 0) 
         common.Data.Clear(); 
       } 
      } 
     } 

약간 느린 :이 같은

뭔가

commons.Where(x => x.Data.Any()).Skip(4).ToList().ForEach(x => x.Data = new List<string>()); 
0

이 반사를 사용해야합니다 작동 할 수 있습니다. ViewCommonItemVM이 아닌 속성이있는 경우 item.GetValue (this)가 올바른 유형인지 여부를 확인하도록 코드를 변경합니다.

관련 문제