작성, 전화 사이트를 구축해야 바인더 등
어떻게 볼 수있는 가장 쉬운 방법이 컴파일하는 것입니다
: 리플렉터와 함께 컴파일 다음
public static object GetDynamicValue(dynamic o, string name)
{
return o.Foo;
}
및 운동 무엇을 그것은하고있다. 그것은 꽤 복잡 할 것입니다. 그리고 여러분은 그것을 하나의 정적 인 캐시 된 호출 사이트에서 각 호출에 대한 새로운 호출 사이트로 변경해야 할 것입니다. 여기
이 작업을 수행하는 예 ...하지만 그것은 여부
완전히 올바른지 아닌 다른 문제 : (I이 나는 위의 제안을 정확히 수행하여 가고있어.)
using Microsoft.CSharp.RuntimeBinder;
using System;
using System.Dynamic;
using System.Runtime.CompilerServices;
class Test
{
public static object GetDynamicValue(dynamic o, string name)
{
CallSite<Func<CallSite, object, object>> site
= CallSite<Func<CallSite, object, object>>.Create
(Binder.GetMember(CSharpBinderFlags.None, name,
typeof(Test), new CSharpArgumentInfo[]
{ CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) }));
return site.Target(site, o);
}
static void Main()
{
Console.WriteLine(GetDynamicValue("hello", "Length"));
}
}
InvokeGet를 참조하십시오? IDictionary와 비슷한 동적 객체를 원한다면 ExpandoObject를 사용하지 않을까요? Jon의 제안이 효과가 있을지 모르겠지만이 작업은 사용자가하려는 작업에 대한 너무 복잡한 해결책이라고 생각합니다. –