我有一種情況,我想通過方法作爲參數傳遞屬性的名稱,以便該方法可以調用它。C# - 使用謂詞來選擇屬性
我知道我可以用Reflection
來做到這一點,但這有點矯枉過正 - 而且很複雜,因爲我想要的東西。所以我探索了一下,發現了Predicate<T>
的奇蹟。
這基本上是我想要做的事情,並且請記住,這就像 - 最基本的一樣,快速地將可能的示例放在一起;
public class ContainingParentClassWithProperties {
public PackagedClassWithProperty OptionOne {
get; set;
} = new PackagedClassWithProperty {
DesiredTargetProperty = "1"
};
public PackagedClassWithProperty OptionTwo {
get; set;
} = new PackagedClassWithProperty {
DesiredTargetProperty = "2"
};
}
將包含屬性的對象類型的基本包裝。
然後一個方法,可以採取他們。
public void TryAcceptPredicateMethod(Predicate<ContainingParentClassWithProperties> p) {
Console.WriteLine(p.DesiredTargetProperty);
}
然後使用它;
public void TryCallAcceptPredicateMethod() {
TryAcceptPredicateMethod(n => n.OptionOne);
}
我遇到兩個主要問題;
1.「不能轉換lambda」當我嘗試調用該方法時出現以下錯誤;
不能lambda表達式轉換爲預期的委託類型,因爲一些塊的返回類型不隱式轉換爲委託返回類型
老實說,我不知道這是什麼話。儘管我對lambda表達式不是很熟悉,
2.打電話給目標公司試圖寫出/調用我只是瞄準的屬性不工作;它告訴我Predicate<ContainingParentClassWithProperties>
不包含DesiredTargetProperty
的定義。
我很困惑,整體。有誰能幫我澄清一些嗎?
請閱讀[可能是靜態代表](https://msdn.microsoft.com/en-us/library/ms173171.aspx)和[predicate](https://msdn.microsoft.com/en-us/library/bfcke1bz(v = vs。 110)的.aspx)。他們不是爲此而設計的。 – DRKblade
你能解釋一下你期望的「謂詞」嗎?因爲我認爲你的困惑源自於你認爲它會爲你做點事情的事實,但事實並非如此。 –
nvoigt
@DRKblade - 我會閱讀他們,謝謝。 – Ciel