我在Visual Studio 2015中调试C#代码时遇到了问题。我想在断点中添加一个简单的表达式,所以我作为条件添加了“hierarchyRelation != null”。这是我正在调试的方法的本地变量,并且它确实存在。然而,在运行时,我得到了以下错误:“断点的条件执行失败。条件是“hierarchyRelation != null”。返回的错误是“断点条件必须评估为布尔操作”。单击确定在此断点处停止。”实际上,条件更加复杂,但这是重现问题的最简单情况。我尝试了各种变体,甚至比较了这个变量的属性,它总是失败。如果我尝试一个常量条件,例如“1!= 2”或“1 = 1”,它就可以正常工作。有什么问题吗?我找到了一个相关的问题this,但它是在vb代码中。其解决方案是直接在代码中添加调试方法。虽然我可以这样做,但我想知道为什么这不起作用。
我正在
方法代码
private HierarchyNodeDto GetNodeTreeThatContainsText<TRollup, TLeaf, THierarchyRelation>(HierarchyNodeDto root, string text, PreFilter preFilter, Func<TLeaf, bool> leafContainsTextFunc, bool parentContainsText) where TRollup: HierarchyNodeDto where TLeaf: HierarchyNodeDto {
dynamic rootNode = root as TRollup;
if (rootNode != null) {
if (rootNode.Nodes == null) {
return null;
}
var childNodesWithText = new List<THierarchyRelation>();
foreach (var hierarchyRelation in rootNode.Nodes) {
var isLeaf = hierarchyRelation.Node.GetType() == typeof(TransactionTypeHierarchyLeafDto) || hierarchyRelation.Node.GetType() == typeof(AccountHierarchyLeafDto);
if (!isLeaf && hierarchyRelation.Node.Name != null && hierarchyRelation.Node.Name.ToLower().Contains(text) && preFilter != PreFilter.Leafs) {
childNodesWithText.Add(hierarchyRelation);
continue;
}
var subtreeThatContainsText = this.GetNodeTreeThatContainsText<TRollup, TLeaf, THierarchyRelation>(hierarchyRelation.Node, text, preFilter, leafContainsTextFunc, rootNode.Name.ToLower().Contains(text));
if (subtreeThatContainsText == null) {
continue;
}
hierarchyRelation.Node = subtreeThatContainsText;
childNodesWithText.Add(hierarchyRelation);
}
rootNode.Nodes = childNodesWithText;
if (rootNode.Nodes.Count > 0 || (rootNode.Name.ToLower().Contains(text) && preFilter != PreFilter.Leafs)) {
return rootNode;
}
return null;
}
var rootLeaf = root as TLeaf;
return rootLeaf != null && ((leafContainsTextFunc.Invoke(rootLeaf) && preFilter != PreFilter.Nodes) || (parentContainsText && preFilter != PreFilter.Leafs)) ? rootLeaf : null;
}
我正在
foreach
内的第一行添加断点。