Mam funkcja, która zwraca typ anonimowy jak tak (uproszczone dla celów poglądowych) ...Dlaczego nie mogę uzyskać dostępu do właściwości anonimowego typu zwracanego z funkcji za pośrednictwem dynamicznego słowa kluczowego?
public object GetPropertyInfo()
{
return new {
PropertyName = "Foo",
Value = "Laa"
};
}
Kiedy to zrobić ...
dynamic pi = GetPropertyInfo();
Console.WriteLine(pi);
To wyprowadza ten (podobnie jak gdybym to zrobił? 'pi' w najbliższym oknie) ...
{ PropertyName = "A", Value = 44 }
PropertyName: "A"
Value: 44
Ale gdybym spróbować zrobić to ...
string propertyName = pi.PropertyName;
... kompiluje ale zgłasza wyjątek środowiska wykonawczego mówiąc
rzucony wyjątek: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' w System.Core.dll
Dodatkowa informacja: 'obiekt' nie nie zawiera definicji "NazwaOznaczenia"
Co daje? Czego tu mi brakuje?
Co właściwie zwraca funkcja "GetPropertyInfo()"? Jaka jest implementacja? Ten błąd, który otrzymujesz, oznacza, że nie jest to tylko anonimowy obiekt, w przeciwnym razie nie dostaniesz tego błędu. Jeśli 'pi' _was_ było dynamiczne, to ta linia nawet nie wygenerowałaby tego błędu,' propertyName' również byłaby dynamiczna. –
@MarqueIV: Czy są to dwie predefiniowane właściwości? W ogóle nie potrzebujesz dynamiki, chyba że ma ona właściwości dynamiczne. – CharithJ
Dynamika polegała na tym, że próbowałem uzyskać dostęp do właściwości typu anonimowego, przesyłając przez zwracany typ obiektu 'object'. Obiekt nie ma właściwości PropertyType lub Value, stąd użycie opcji Dynamic. Myślę, że problemem jest wewnętrzne ograniczenie, ale nadal jestem ciekawy, jak to wygląda w oknie wyjściowym VS. – MarqueIV