매우 쉽게 아니요. 이 아닌 dynamic
의이 아닌 일반 유형 모델을 가정하므로 반사가 작동하지 않습니다. 실제로 그냥 일반 물체와 대화하는 중이라면 여기에서 반사를 사용하십시오. 그렇지 않으면 컴파일러에서 기본 할당을 위해 생성하는 코드를 리버스 엔지니어링하여 유연하게 멤버 이름을 갖도록 조정할 수 있습니다. 솔직히 말해서, 이것은 매력적인 옵션이 아닙니다. 간단한 :
dynamic foo = ...
foo.Bar = "abc";
는로 변환 :
if (<Main>o__SiteContainer0.<>p__Site1 == null)
{
<Main>o__SiteContainer0.<>p__Site1 = CallSite<Func<CallSite, object, string, object>>.Create(Binder.SetMember(CSharpBinderFlags.None, "Bar", typeof(Program), new CSharpArgumentInfo[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null), CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) }));
}
<Main>o__SiteContainer0.<>p__Site1.Target(<Main>o__SiteContainer0.<>p__Site1, foo, "abc");
당신은 동적 및 비 동적 객체 모두를 위해 작동하는 방식하려면 다음 FastMember이 편리하고, 중 하나에서 일을 유형 또는 객체 수준 :
// could be static or DLR
var wrapped = ObjectAccessor.Create(obj);
string propName = // something known only at runtime
Console.WriteLine(wrapped[propName]);
누메트에서 사용할 수 있으며 동적 및 비 동적 sc enarios.
속성은 해시 맵에 속성을 넣어 런타임에서 확인할 수있는 경우가 아니면 자신의 솔루션 일 수 있습니다. –
가능한 [ExpandoObject에 알 수없는 (디자인 타임에) 속성 추가] (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – nawfal