Chcę uzyskać dostęp do właściwości obiektu podczas korzystania z mechanizmu powiązania DLR.Wywołanie elementu obiektu dynamicznego o nazwie zdefiniowanej w środowisku wykonawczym w ciągu znaków
- Nie mogę użyć macierzystego mechanizmu wiążącego (
dynamic
słowo kluczowe w języku C#), ponieważ nie znam nazwy właściwości podczas kompilacji; - Nie mogę użyć odbicia, ponieważ pobiera on tylko informacje o typie statycznym;
- odlewanie do
IDictionary<string, object>
, według mojej wiedzy, rozwiązuje tylko przypadek klas dynamicznych, które decydują się na implementację tego interfejsu (np.ExpandoObject
).
Oto kod demonstracji:
static void Main(string[] args)
{
dynamic obj = new System.Dynamic.ExpandoObject();
obj.Prop = "Value";
// C# dynamic binding.
Console.Out.WriteLine(obj.Prop);
// IDictionary<string, object>
Console.Out.WriteLine((obj as IDictionary<string, object>)["Prop"]);
// Attempt to use reflection.
PropertyInfo prop = obj.GetType().GetProperty("Prop");
Console.Out.WriteLine(prop.GetValue(obj, new object[] { }));
Console.In.ReadLine();
}
Rzecz w tym, że pracuję przy założeniu, że nie kontrolują obiekt dynamiczny, że jestem czasochłonne - może to być dowolny obiekt, który implementuje IDynamicMetaObjectProvider. –