gpt4 book ai didi

c# - 将 OrderBy Predicate 中的 Lambda 表达式从 C# 转换为 VB.net

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:35 25 4
gpt4 key购买 nike

我有以下内容可以根据工作职位对实体进行排序。所需的顺序在另一个数组中定义。在 C# 中,此代码有效:

IEnumerable<CreditObject> query = credits.OrderBy(x =>
{
for (int i = 0; i < list.Length; i++)
{
if (x.Job == list[i])
return i;
}
throw new NotImplementedException("Job not within List");
});

但是我必须将其转换为 VB.net。我读到的等效内容如下所示:

Dim query As IEnumerable(Of CreditObject) = credits.OrderBy(Function(x) 

For j As Integer = 0 To templ.Length - 1
If x.Job = templ(j) Then
Return j
End If
Next

End Function)

这不会编译,在 Function(x) 之后给我“预期的表达式”。我做错了什么?

最佳答案

首先,你把它变成一个真正的方法:

public int GetCreditObjectPosition(CreditObject x, List<int> list) {
for (int i = 0; i < list.Length; i++) {
if (x.Job == list[i]) {
return i;
}
}
throw new NotImplementedException("Job not within List");
}

然后,你只要说:

IEnumerable<CreditObject> query =
credits.OrderBy(x => GetCreditObjectPosition(x, list));

这很容易转换为 VB。

接下来,您重写 GetCreditObjectPosition 以大幅提升性能:

public int GetCreditObjectPosition(CreditObject x, List<int> list) {
var jobDictionary =
list.Select((job, index) => new { Job = job, Index = Index } )
.ToDictionary(item => item.Job, item => item.Index);
int position;
if(!jobDictionary.TryGetValue(x.Job, out position)) {
throw new Exception("Job not within List");
}
return position;
}

关于c# - 将 OrderBy Predicate 中的 Lambda 表达式从 C# 转换为 VB.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10295379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com