更改測試:
var firstInt32Property = property.PropertyType == typeof(int);
這是必要的,因爲酒店的財產型本身不是一個整數:它是一個System.Type
對象,它(鬆散地)表示屬性獲取器返回/屬性設置器接受的類型。另一方面,調用包含類型實例的屬性getter將生成一個實際整數
下面是使用LINQ,而不是foreach
循環的方式:(。如果沒有這樣的屬性存在,這會拋出異常)
var firstInt32Property = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.First(p => p.PropertyType == typeof(int));
要檢索的屬性的值從包含類型的實例:
int value = (int)firstInt32Property.GetValue(myObj, null);
這當然會失敗,如果t他'第一'Int32
財產碰巧是一個索引或確實如果它根本沒有一個getter。如果可能的話,您可以在原始查詢中過濾這些屬性。
另外請注意,這個代碼是有限的使用,因爲「一類,它是一個整數的第一個屬性」的想法是有點可疑。從Type.GetProperties
:
GetProperties
的方法做在一個特定 爲了不 返回的屬性,如字母或 聲明順序。您的密碼不得 取決於 屬性返回的順序,因爲該 順序會有所不同。
來源
2010-09-27 05:10:56
Ani
您可以在這裏使用==代替.Equals,因爲Type對象對於特定類型是唯一的。不是批評 - 當然你的代碼會起作用 - 我只是覺得==更易於閱讀。 – 2010-09-27 05:23:16
嗯..不知道如何定義第一個屬性。我的意思是,有些類有一個'int'作爲它們的第一個屬性。我真的想創建一個'接口',這意味着我可以輕鬆地獲取任何實現該接口的實例後的屬性..但是我不能在這裏做到這一點。無論如何,我並沒有關於實際上攫取「錯誤的」int屬性。這只是一些研發的東西。 – 2010-09-27 05:23:48
+1正好,PropertyType中的內容不是int的一個實例,是System.Type的一個實例。 – eglasius 2010-09-27 05:25:51