【问题标题】:How to create a Visual-Studio string visualizer?如何创建 Visual-Studio 字符串可视化工具?
【发布时间】:2009-08-18 14:25:50
【问题描述】:

我正在尝试为 IDictionary 或 ICollection 创建可视化工具

然后像简单的可视化器(没有对话框;我的意思是悬停变量时出现的常用字符串可视化器,见下图),我想制作我的自定义文本,我想将集合转换为它的类型列表(IE StringCollection 到 List(Of String) 或 List),然后我将能够在可视化器中看到它。 或者对于字典显示以列出键和值的可视化工具。

任何想法如何实施甚至如何开始?

我会尽快更新我的问题。

这是我想到的:

using System.Collections.Specialized;
using System.Collections;

namespace ConsoleApplication2
{
    static class Program
    {
        static void Main(string[] args)
        {
            System.Collections.Specialized.StringCollection collection = new StringCollection();
            collection.AddRange(new string[] { "string1", "string2", "sting3" });
            string[] visualizable = collection.ConvertToVisualizableList();

            Dictionary<string,string> dic = new Dictionary<string,string>
            {
              {"key1","value"},
              {"key2","value"}
            };
            string[,]      visualizable2 = dic.ConvertToVisualizableDictionary();



        }

        static string[] ConvertToVisualizableList(this IList collection)
        {
            lock (collection)
            {
                if (collection == null) return null;
                int length = collection.Count;
                string[] list = new string[length];

                for (int i = 0; i < length; i++)
                {
                    object item = collection[i];
                    if (item != null) list[i] = item.ToString();
                }

                return list.ToArray();
            }
        }

        static string[,] ConvertToVisualizableDictionary(this IDictionary dictionary)
        {
            if (dictionary == null) return null;
            int length = dictionary.Count;
            string[,] list = new string[length, 2];

            int i = 0;
            foreach (object item in dictionary.Keys)
            {
                list[i, 0] = item.ToString();
                object value = dictionary[item];
                if(value!=null) list[i, 1] = value.ToString();
                i++;
            }
            return list;
        }
    }
}

这些是数组和多维数组的 VS 可视化工具:

我想对 ICollection(或 IList)、IDictionary 等使用类似的东西。

请注意,在数组中,可视化工具会显示每个嵌套的对象。 这其实是我想要达到的目标

.

尝试可视化一个List,你会看到有一个私有值_items,所以你可以看到它的items。 我想在集合和字典中实现类似的东西。

【问题讨论】:

    标签: c# vb.net visual-studio-2008 debuggervisualizer


    【解决方案1】:

    Code Project 上有很多示例。这是我最有经验的一个:DataSet Visualizer

    我自己安装并使用了它,所以我知道它可以工作。 Is 比您需要的更高级,因为它实际上显示了整个 ADO 数据集,但代码应该很容易修改。

    这里还有几个其他链接可供查看:

    Project 1

    Project 2

    【讨论】:

    • 其实我想要的是控制字符串出现的区域,我希望这应该成为可视化器的地方,这可能吗?
    • 我知道可视化 API 广泛而强大,但您将不得不亲自动手。上面这三个链接中的任何一个看起来是否完全接近您希望可视化器的操作方式?我会选择一个并运行它。有几十篇来自基本谷歌搜索的文章:google.com/… Dobb 博士的这篇文章看起来特别有前途:ddj.com/windows/184406197
    • 非常感谢,非常有帮助!如果/何时我将创建可视化工具,我将在此处发布!
    • 这太棒了 Shimmy。敬请期待。
    • 这是个问题。我希望我可以在我的可视化器中嵌套一个 vs-visualizer,因为我只想为 ICollection 分隔我的可视化器,我宁愿为 ICollection 做它并使用应该为每个项目起作用的 VS 可视化器分别地。有没有办法
    【解决方案2】:

    我发现了一些已经存在的东西:

    http://www.codeproject.com/KB/macros/ListVisualizer.aspx,但它仍然不会显示对象。

    【讨论】:

      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2010-10-29
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多