gpt4 book ai didi

c# - 仅在 Visual Studio 的调试器中按键对字典进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:32 26 4
gpt4 key购买 nike

我在我的应用程序中使用基于字典的对象。调试时(并且仅当我检查字典时)我想查看字典的内容但按键排序。

我知道我可以使用 SortedDictionary 而不是 Dictionary,但与 Dictionary 相比性能较差,我不想影响性能。

我也不希望出现“#if debug”条件。

这可能吗?

最佳答案

您可以指定 DebuggerTypeProxyAttribute()在你调试时/如果你调试时使用的类。该代理必须为您排序数据。

文章:Enhancing Debugging with the Debugger Display Attributes

使用 Dictionary<string,int> 的(无意义的) child 的示例:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

internal class Program
{
/// <summary>
/// Derives from a Dictionary that is not sorted
/// </summary>
[DebuggerTypeProxy(typeof(DictDebugView))]
public class MyDictionary : Dictionary<string, int>
{
/// <summary>
/// Prepares unsorted dummy data
/// </summary>
public void PopulateDemoData()
{
foreach (char t in "GERZWIQSFHIWE")
this[new string(t, t / 10)] = t;
}

/// <summary>
/// Is used as proxy for display
/// </summary>
internal class DictDebugView
{
private readonly SortedDictionary<string, int> sorted;
public DictDebugView(Dictionary<string, int> data)
=> sorted = new SortedDictionary<string, int>(data);

/// <summary>
/// Create the displayed KeyValuePairs
/// </summary>
[DebuggerBrowsable(DebuggerBrowsableState.Collapsed)]
public IList<KeyValuePair<string,int>> Keys
{
get => sorted.Select(kvp => kvp).ToList();
}
}
}

public static MyDictionary MyProp { get; } = new MyDictionary();

public static void Main(string[] args)
{
var md = new MyDictionary();
md.PopulateDemoData();

var k = new Dictionary<string,int>(md);

Console.ReadLine();
}
}

如果您放置一个断点并进行调试,您将使用内部 DebuggerTypeProxy 为您的类获得排序的输出:

Using the DebuggerTypeProxy

以及不使用任何代理来显示其数据的“普通”字典的未排序输出:

as plain dict

关于c# - 仅在 Visual Studio 的调试器中按键对字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074314/

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