繁体   English   中英

如何将“out”参数传递给 lambda 表达式

[英]How to pass 'out' parameter into lambda expression

我有一个具有以下签名的方法:

private PropertyInfo getPropertyForDBField(string dbField, out string prettyName)

在其中,我根据给定的dbField prettyName 然后,我想查找名称为prettyName的所有属性(如果有),因此我尝试执行以下操作:

IEnumerable<PropertyInfo> matchingProperties =
    getLocalProperties().Where(prop =>
        prop.Name.Equals(prettyName)
    );

但是,这会产生以下错误:

不能在匿名方法、lambda 表达式或查询表达式中使用 ref 或 out 参数“prettyName”

在我尝试在Where lambda 参数中使用prettyName的方法中, prettyName肯定已被初始化。 如果prettyName无法初始化为有效值,我会return 我可以在这里做一些技巧来让我在 lambda 表达式中使用prettyName吗?

编辑:如果重要的话,我正在使用 .NET 3.5。

只是为了澄清。 可以在 lambda 中使用来自被调用方法的 ref/out 参数。

如果指定参数的类型,也可以使用 ref 或 out。 这意味着将 prettyName 作为参数发送给 lambda。

(prop, ref string prettyName) => prop.Name.Equals(prettyName);

Where 子句只接受一个参数,即列表中的属性元素。 这就是阻止您向 lambda 添加参数的原因。

不想给人们留下无法在 lambda 中使用这些参数的错误印象。 您只是不能通过捕获来使用它们。

正如编译器错误所示,不允许在 lambda 表达式中使用 out 或 ref 参数。

为什么不直接使用副本? 无论如何,lambda 都不想改变变量,所以我看不出有什么缺点。

string prettyNameCopy = prettyName;
var matchingProperties = getLocalProperties()
                        .Where(prop => prop.Name == prettyNameCopy);

或者,您可以使用局部变量(以评估适当的名称等),并在从方法返回之前分配out参数prettyName 如果方法中没有明显的分支,这可能会更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM