2015-12-29 47 views
0

我有一個對象叫myConstraint,其中可能有一個名爲Parameter的屬性。如何獲取和設置可能是另一個對象屬性的對象的屬性?

Parameter是具有Name屬性的對象,該屬性是字符串類型。

我要檢查Constraint,如果它具有這樣的特性Parameter獲取字符串Parameter.Name,如果它等於「長度」 Constraint.Parameter值設置爲myLengthParameter

我無法使用Constraint.Parameter,因爲在程序運行之前編譯器不知道對象是否具有屬性Parameter。我試圖使用反射,但我無法弄清楚。我很感謝你的幫助。

+0

鑄'object'到您的類,例如'((約束)myConstraint).Parameter' – J3soon

+4

你是什麼意思*可能有*?爲什麼不把它放在那裏,如果你不需要'Parameter',讓它成爲'null'? –

+0

@ kienct89:這不是我的代碼,我只是使用這個類。 – Saeid

回答

1

是的,你可以使用反射來做到這一點。

由於約束變量可以有任何值,所以你可以做這樣的事情。

var property = constraint.GetType().GetProperty("Parameter"); 

if (property != null) 
{ 
    var parameter = property.GetValue(constraint); 
    if (parameter != null) 
    { 
     var parameterName = parameter.GetType().GetProperty("Name").GetValue(parameter).ToString(); 
     if (parameterName == "Length") 
     { 
      property.SetValue(constraint, myLengthParameter); 
     } 
    }   
} 
1

使用is檢查實例類型,然後將對象轉換爲Constraint類型。 (參見J3soon的評論)

if (myConstraint is Constraint) 
{ 
    // cast and perform your operations here 
} 
+0

有很多可能性。這是行不通的。我認爲使用反射應該有所幫助。請看我的評論。 – Saeid