2011-10-05 3 views
2

을 제공 x.propertyX는 잘 작동 '은'객체 '에 정의되어 있지 않습니다.액세스 속성은 다음 샘플에서는 RuntimeBinderException

Program 클래스 (아래 참조)와 Class1 (표시되지 않음)의 CreateDynamic 메서드는 동일하지만 Class1은 Program과 다른 프로젝트에 있습니다. Class1을 프로그램의 프로젝트로 옮기면 모든 것이 잘 작동합니다.

class Program 
{ 
    public static object CreateDynamic() 
    { 
     return new { propertyX = "asdf" }; 
    } 

    static void Main(string[] args) 
    { 
     dynamic x = CreateDynamic(); 
     Console.WriteLine(x.propertyX); 

     dynamic y = Class1.CreateDynamic(); 
     Console.WriteLine(y.propertyX); 

익명 형식이 동적 유형으로 dll에서 작동하도록하려면 무엇이 필요합니까? 그렇지 않습니다.

는 업데이트 : FWIW, 난 주위에 얻을 수 알아 낸 그

new { key1 = val1, key2 = val2 } 
과 비교했을 때, 그때 동적 '캐스팅',하지만 ExpandoObjects만큼 잘 인스턴스화하지 있습니다 ExpandoObjects를 사용하여 익명 유형이 제공하는

스타일.

+0

익명 형식만큼 확장 인스턴스를 생성 할 수는 없지만 http://stackoverflow.com/questions/6469224/expandoobject-anonymous-types-and-razor/7434036#7434036 – jbtule

답변

1

익명 유형은에서 생성 된 어셈블리에 내장된다. 소스 코드를 제어 할 수 있다면 당신이 그 (것)들에게 Friend Assemblies

[assembly:InternalsVisibleTo("TheOtherAssembly")] 

을하지만 drawbacks이있다 할 수 있습니다.

+0

굉장합니다. , 그 일했다! 불행히도 "TheOtherAssembly"를 와일드 카드로 불러 와서 어셈블리에 액세스 할 수는 없으며 전체 어셈블리를 열면 약간 거친 것처럼 보일 수 있습니다 ... 어떤 경우이든 작동하지 않는 이유를 설명했습니다. 감사! –