如何在 Linq 查询中获取'named'元组组件?



假设我有一个元组,比如说List<(string, Table)>,我想使用元组组件的"命名版本"Parallel.ForEach迭代它。

以下代码执行此操作:

List<(string, Table)> list = new List<(string, Table)>();
Parallel.ForEach(list, tuple => 
{
(string name, Table table) = tuple;
// do stuff with components 'name' and 'table' here
});

我想使用nametable,而不是分别使用tuple.Item1tuple.Item2,因为这会使代码更具可读性。为了完成这项工作,如果我想使用它们的"命名"版本,我必须在ForEach中声明元组组件。


我的问题是:

C# 中是否有一种语法允许我们获取元组的解构版本,避免在ForEach's体内进行该声明?

如果没有这样的语法,我们如何通过扩展方法实现它?


我的意思是,像这样:

List<(string, Table)> list = new List<(string, Table)>();
Parallel.ForEach(list, (string name, Table table) => 
{
// do stuff with variables 'name' and 'table' here
});

或者也许是这个?

List<(string, Table)> list = new List<(string, Table)>();
Parallel.ForEach(list, (name, table) => 
{
// do stuff with variables 'name' and 'table' here
});


而且,如果有语法,它是否也适用于其他Linq查询?

例如

string[] names = parsed.Select((string name, Table table) => name).ToArray();

而不是:

string[] names = parsed.Select(t => t.Item1).ToArray();


这将是非常好的,特别是在处理包含多个组件的元组时,例如List<(int, string, int, DateTime, ...)>.我们将能够在复杂的Linq查询中为元组的组件提供一些上下文!

如何在 Linq 查询中获取"命名"元组组件?

最简单的解决方案是为您的项目命名,如下所示

List<(string Name, Table Table)> list = new List<(string, Table)>();
// or simply
var list = new List<(string Name, Table Table)>();
Parallel.ForEach(list, t => 
{
// do something with t.Name, t.Table
var name = t.Name;
var table = t.Table;
});

C# 中是否有语法允许我们获得解构版本.. 福尔奇内部

阿法克号。

在我看来,你想要这样的东西?

string[] names = parsed.Cast<(string name, Table table)>().Select(p => p.name).ToArray();

你必须使用 : 而不是 =

var k = executeResultSet.Select(s => new
{
IDUser = (int) s["IDUser"],
SourceCode = s["SourceCode"],
SourceSystem = s["SourceSystem"]
}).ToList();
var k = executeResultSet.Select(s => 
(
IDUser: (int) s["IDUser"],
SourceCode: s["SourceCode"],
SourceSystem: s["SourceSystem"]
)).ToList();

不完全是你想要的,但这是克里斯托夫答案的替代方案:

List<(string, Table)> list = new List<(string, Table)>();
Parallel.ForEach(list, ((string name, Table table) t) => 
{
// do stuff with variables 't.name' and 't.table' here
});

相关内容

  • 没有找到相关文章

最新更新