gpt4 book ai didi

c# - linq 查询后未调用 ToString() 重载

转载 作者:行者123 更新时间:2023-11-30 18:22:05 26 4
gpt4 key购买 nike

<分区>

更新:问题仍然存在于我的现实世界解决方案中 - 但不在 LinqPad 中。我知道你不能复制它。我也不行。只要我有一些空闲时间,我就会剥离现实世界的解决方案以便能够分享它。

考虑这个简单的类

public class Node
{
public string Group { get; set; }
public int SequenceNumber { get; set; }

public override string ToString()
{
return string.Format("This is the Node.ToString() method!");
}
}

我有两个 linq 查询。它们都返回完全相同的结果,不同之处在于先前排序的列表中后面的查询组。

// working example
var query = unsortedNodes.GroupBy(n => n.Group).SelectMany(g => g.OrderBy(n => n.SequenceNumber));
_nodes = query.ToList();
_nodes.ForEach(n => LoggerProxy.Debug(_logger, null, "Node {0}", n));

示例结果:

2015-12-21 15:29:00.9083  DEBUG   Company.Project.Controls.MyControl   Node "This is the Node.ToString() method!"

好!

但是,如果我向 linq 查询添加另一个“orderby”,因为我还希望对分组进行排序,ToString() 方法突然不再起作用。

// query working, but ToString() in logger method is not.
// sort by group, group by group, sort by sequence number
var query = unsortedNodes.OrderBy(n => n.Group).GroupBy(n => n.Group).SelectMany(g => g.OrderBy(n => n.SequenceNumber));
_nodes = query.ToList();
_nodes.ForEach(n => LoggerProxy.Debug(_logger, null, "Node {0}", n));

令我惊讶的是,日志现在只显示类名(默认 ToString() 行为)。

示例结果:

2015-12-21 15:25:00.0137  DEBUG   Company.Project.Controls.MyControl   Node "Company.Project.Node"

不好!

这与记录器无关。 Visual Studio 中间窗口:

_nodes[0].ToString();
"Company.Project.Node"
((QpVisualizerNode)_nodes[0]).ToString();
"Company.Project.Node"

.NET 框架版本为 4.5.51209(发布 379893)

通过在 linq 查询中添加和删除“.OrderBy(n => n.Group)”语句,可以通过两种方式重现该问题。

有什么线索吗?

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