2011-09-12 2 views
1

내가 전에 관련 질문을 결합하고 How could i define anonymous type?이 익명 형식

에 gretat ansfer을 얻을하지만 지금 내가 궁금 그것은 기본적으로 내가 캐시에 약간의 주간 데이터를 저장하고이 익명 형식

을 결합 할 수 있습니다 같은 나는 현재 주 에 대한 몇 가지 데이터를 포함하고있다 object으로 내가 anonymous type를 저장하고 난 그 객체 매일 오늘의 데이터를 추가 할 경우에

그래서 관련 queston 설명.

그래서 나는 한쪽에서 objectanonymous type 데이터를 가지고 서로 내가 완전히 동일한 구조 anonymous type을 가지고 내가/APPEND을 objectanonymous type 내 새로운 anonymous type에 이전 데이터를 추가하고 다시 넣어 원하는 캐시 할 수 있습니다. 내 관련 질문을 보일 것이다 경우

내 익명 형식 그렇게 찾고 :

var jsonData = new { total = 0, page = 0, records = 0, 
        rows = new[] { new { dummy = "" } }; 

그래서 질문은 내가 내 경우에는 익명 형식을 결합 할 수있는 방법인가?

는이 컬렉션 될 경우 내가 그

List<Data> weeklyFromCahce = GetFromCache() 
List<Data> todaysToCahce = GetFromDataBase(); 

처럼 내가 루프 todaysToCahce하지만 것 및 weeklyFromCahce 각 항목을 추가하고 넣어 다시 캐시 weeklyFromCahce 업데이트보다 갈 것입니다 예를 들어.

그래서 내 경우에는 익명 유형을 사용하여 비슷한 프로세스를 수행하려고합니다. 결합 된 결과는 주간 데이터 + 현재 날짜 데이터를 포함하는 anonymous type이어야하며 두 익명 인스턴스의 결합 된 결과를 포함하는 새 anonymous type으로 캐시를 업데이트합니다.

+0

"결합"얼마나 정확합니까? 결합 된 결과가 무엇인지에 대한 두 가지 사례와 사례를 우리에게주십시오. – Jon

+0

@Jon question updated – jason

+1

익명 형식을 고집하는 이유는 무엇입니까? 동일한 데이터 형식이 둘 이상의 장소에서 사용되는 경우 객체를 도입 할 수 있습니다. – henginy

답변

1
var x = new { member1 = 123 }; 
var y = new { member2 = "qwerty" }; 
var z = new { part1 = x, part2 = y }; // combined 

?

는 TS 주석

var x = new { member1 = 123 }; 
var y = new { member2 = "qwerty" }; 
var z = new { member1 = x.member1, member2 = y.member2 }; // combined 

업데이트가 귀하의 경우 허용의 경우 2

class DynamicPair<TX, TY> : DynamicObject 
{ 
    private readonly TX _x; 
    private readonly TY _y; 

    public DynamicPair(TX x, TY y) 
    { 
     _x = x; 
     _y = y; 
    } 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     try 
     { 
      var property = typeof (TX).GetProperty(binder.Name); 
      if (property != null) 
      { 
       result = property.GetValue(_x, null); 
       return true; 
      } 

      property = typeof (TY).GetProperty(binder.Name); 
      if (property != null) 
      { 
       result = property.GetValue(_y, null); 
       return true; 
      } 
     } 
     catch 
     { 
     } 

     result = null; 
     return false; 
    } 

    public override bool TrySetMember(SetMemberBinder binder, object value) 
    { 
     // too lazy 
     return true; 
    } 
} 


class Program 
{ 
    private static DynamicPair<TX, TY> Combine<TX, TY>(TX x, TY y) 
    { 
     return new DynamicPair<TX, TY>(x, y); 
    } 

    static void Main(string[] args) 
    { 
     var x = new { a = 123 }; 
     var y = new { b = 222 }; 
     dynamic z = Combine(x, y); 
     Console.WriteLine("{0}, {1}", z.a, z.b); 
    } 
} 

정확하게 확실하지 후 업데이트,하지만 여전히 작동합니다.

+0

실제로는 결합하지 않았습니다 :) 그 결과는 두 개의 분리 된 '익명의 객체'를 포함하는'익명의 타입'입니다. – jason

+0

업데이트 – agibalov

+0

을 참조하십시오. 또한 업데이트 2를 참조하십시오. – agibalov