3
更新:問題仍然在我的現實世界的解決方案存在 - 不LinqPad雖然。我明白你不能重現它。我也不行。只要我有空閒的時間,我會剝奪現實世界的解決方案,以便能夠分享它。的ToString()重載不會被調用
考慮這個簡單的類
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!"
好!
但是,如果我添加另一個「orderby」的linq查詢,因爲我也希望分組排序,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"
BAD!
這不是記錄儀。的Visual Studio中間窗口:
_nodes[0].ToString();
"Company.Project.Node"
((QpVisualizerNode)_nodes[0]).ToString();
"Company.Project.Node"
.NET框架版本是4.5.51209(釋放379893)
的問題是可再現通過添加和刪除的」 .OrderBy(N => n.Group兩種方式)「語句在linq查詢中。
任何線索?
我無法使用簡單的控制檯應用程序和Console.Writeline重現此操作。你可以嘗試做一個生成 - >清理,重建並確認它仍然是一個問題? –
請給我們更多的細節。你使用哪種記錄器,或者它是自定義的。 – dimonser
爲Console.WriteLine工作正常 – Valentin