bool isDefined = false;
object axis = null;
try
{
axis = this.ChartDetails.Chart.LeftYAxis;
isDefined = true;
}
catch(RuntimeBinderException)
{ }
Đây là những gì xảy ra khi chạy lúc đầu. (Khi bạn truy cập vào một tài sản mảnh 'động' của những thứ chỉ xảy ra khi một ngoại lệ đầu tiên có cơ hội được xử lý bởi ghi đè của đối tượng của DynamicObject
's TryGetMember
và TrySetMember
Một số đối tượng (như ExpandoObject
) là thực sự từ điển dưới mui xe và bạn có thể kiểm tra trực tiếp như sau:
bool isDefined = ((IDictionary<string, object>)this.ChartDetails.Chart)
.ContainsKey("LeftYAxis");
về cơ bản: không biết những gì thực tế loại ChartDetails.Chart
là (nếu nó là một ExpandoObject
một ol đồng bằng' lớp con của object
hoặc một lớp con của DynamicObject
) không có cách nào bên cạnh thử/nắm bắt ở trên. Nếu bạn đã viết mã cho ChartDetails
và Chart
hoặc có quyền truy cập vào mã nguồn, bạn có thể xác định phương thức nào tồn tại cho đối tượng và sử dụng các phương thức đó để kiểm tra.
nếu this.ChartDetails.Chart.LeftYAxis! = Null –
Đây có phải là * của bạn * triển khai DynamicObject không? – Tigran
có thể trùng lặp của [làm thế nào để phát hiện nếu một tài sản tồn tại trên một đối tượng năng động trong C#?] (Http://stackoverflow.com/questions/2839598/how-to-detect-if-a-property-exists-on-a -namnamic-object-in-c) – jason