2014-04-03 3 views
0

이 문제는 메서드에 전달되는 Expando 개체와 관련이있는 것 같습니다. ExpandoObject를 전달하면 자동 생성되어야하는 컴파일러 서비스 정보가 비어 있습니다. 메서드에서 ExpandoObject를 사용하지 않으면 정보가 잘 전달됩니다. 문제는 따라서는 처리, 당신이 호출을 지연하는대로의 dynamic 키워드로는 ExpandoObject하지ExpandoObject 사용시 컴파일러 서비스 정보가 누락되었습니다.

public class TestClass 
    { 
     public void TestWithClass(object SomeClass, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) 
     { 
      Console.WriteLine(memberName); // Compiler Services information prints out just fine. 
     } 

     public void TestWithExpando(ExpandoObject xPando, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) 
     { 
      Console.WriteLine(memberName); // Compiler Services information is blank 
     } 

     public void RunTest() 
     { 
      //This test case works fine. 
      var jnk = new Junk {Test = "TEST DATA"}; 
      TestWithClass(jnk); 


      //This test case fails to print the Compiler Services information. 
      dynamic xp = new ExpandoObject(); 
      xp.Test = "TEST DATA"; 

      TestWithExpando(xp); 
     } 

     public class Junk 
     { 
      public string Test { get; set; } 
     } 
    } 

답변

1

컴파일러 서비스 정보가 컴파일러에 의해 수행됩니다

나는 빠른 테스트 케이스를 생성 DLR 컴파일러가 아닙니다. 먼저 object으로 전송하면 문제가 해결됩니다.

TestWithExpando((object)xp); 
관련 문제