2009-09-21 2 views
1
나는 두 개체, foobar이있는 경우, 객체 초기화 구문을 사용하여 delared

...가 하나의 객체

object foo = new { one = "1", two = "2" }; 

object bar = new { three = "3", four = "4" }; 

에 속성을 포함하는 두 객체를 병합하는 모습 것, 하나의 개체로 이러한 결합 할 수 있나요 이렇게 ...

object foo = new { one = "1", two = "2", three = "3", four = "4" }; 
+0

을 나는 당신이 무엇을 요구 확실하지 않다? –

+0

foo = new {one = foo.one, three = bar.three} – ICR

+0

(복제본으로 닫으려는 내 투표는 다음과 같음)을 수행하는 대신 임의의 두 임의의 객체를 사용하여이 작업을 수행 할 수 있기를 원합니다. 실수 - 제대로 질문을 읽지 못했습니다.) –

답변

7

아니요,이 작업을 수행 할 수 없습니다. 컴파일 타임에는 두 가지 유형이 있지만 실행 시간에 세 번째 유형이 필요합니다. 속성의 합집합을 포함해야합니다.

나는 과 관련된 새로운 유형의 어셈블리를 만들 수 있습니다.하지만 어쨌든 코드에서 "정상적으로"참조 할 수는 없습니다.

1

명명 충돌이 없다고 가정하고 리플렉션을 사용하여 개체의 속성을 읽고 단일 형식으로 병합 할 수 있지만이 형식을 리플렉션을 수행하지 않고 코드에서 직접 액세스 할 수는 없습니다 게다가.

키워드에서 dynamic 키워드의 도입으로 코드의 동적 유형을 상당히 쉽게 참조 할 수 있습니다. 그것은 더 나은 해결책, 마음을 만들지 않습니다.

3

다른 사람이 말했듯이, 당신이 무엇을 설명 할 편리 아니지만 그냥 결합 특성에 대한 몇 가지 처리를 수행하려는 경우 :

Dictionary<string, object> GetCombinedProperties(object o1, object o2) { 
    var combinedProperties = new Dictionary<string, object>(); 
    foreach (var propertyInfo in o1.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
     combinedProperties.Add(propertyInfo.Name, propertyInfo.GetValue(o1, null)); 
    foreach (var propertyInfo in o2.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
     combinedProperties.Add(propertyInfo.Name, propertyInfo.GetValue(o2, null)); 
    return combinedProperties; 
} 
관련 문제