我有一个具有以下签名的方法:
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/