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

private PropertyInfo getPropertyForDBField(string dbField, out string prettyName)

在其中,我根据给定的prettyName找到关联的值dbField。然后,我想查找所有名称为prettyName的属性(如果有的话),因此我尝试执行以下操作:
IEnumerable<PropertyInfo> matchingProperties =
    getLocalProperties().Where(prop =>
        prop.Name.Equals(prettyName)
    );

但是,这产生以下错误:



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

编辑:如果有问题,我正在使用.NET 3.5。

最佳答案

正如编译器错误指示的那样,不允许在lambda表达式内使用out或ref参数。

为什么不只使用副本?无论如何,lambda都不希望对变量进行突变,因此我看不到任何不利之处。

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

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

关于c# - C#-如何将 'out'参数传递给lambda表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4045792/

10-12 12:43