簡體   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