作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个具有以下签名的方法:
private PropertyInfo getPropertyForDBField(string dbField, out string prettyName)
在其中,我根据给定的 dbField
找到关联值 prettyName
。然后我想找到名称为 prettyName
的所有属性(如果有的话),因此我尝试执行以下操作:
IEnumerable<PropertyInfo> matchingProperties =
getLocalProperties().Where(prop =>
prop.Name.Equals(prettyName)
);
但是,这会产生以下错误:
Cannot use ref or out parameter 'prettyName' inside an anonymous method, lambda expression, or query expression
在方法中我尝试在 Where
lambda 参数中使用 prettyName
时,prettyName
肯定已初始化。如果 prettyName
无法初始化为有效值,我将返回
。我可以在这里做一些技巧让我在 lambda 表达式中使用 prettyName
吗?
编辑:如果重要的话,我正在使用 .NET 3.5。
最佳答案
只是为了澄清。可以在 lambda 中使用被调用方法的 ref/out 参数。
如果指定参数类型,也可以使用 ref 或 out。这意味着将 prettyName 作为参数发送给 lambda。
(prop, ref string prettyName) => prop.Name.Equals(prettyName);
Where 子句只接受一个参数,即列表中的属性元素。这就是阻止您向 lambda 添加参数的原因。
不想给人们留下不能在 lambda 中使用这些参数的错误印象。您只是不能通过捕获来使用它们。
关于c# - 如何将 'out' 参数传递给 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045792/
我是一名优秀的程序员,十分优秀!