我有一种情况,我想通过方法作为参数传递属性的名称,以便该方法可以调用它。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