C# 如何在Visual Studio中使用LINQPad Dump()扩展方法?
LINQPad令人惊讶,特别有用的是C# 如何在Visual Studio中使用LINQPad Dump()扩展方法?,c#,linqpad,C#,Linqpad,LINQPad令人惊讶,特别有用的是Dump()扩展方法,它将几乎任何类型的对象和结构呈现到控制台,不管是匿名的还是非匿名的 最初,当我搬到Visual Studio 2010时,我尝试使用委托来创建我自己的Dump方法,以获取匿名类型的值,等等。虽然这变得相当复杂,虽然一开始很有趣,很有教育意义,但我需要一个可靠的实现。在中检查了LINQPad代码之后,我更加确信我不会得到正确的实现 是否有免费的库可以提供转储功能?查看此处(您的路径可能会有所不同): C:\Program Files(x86
Dump()
扩展方法,它将几乎任何类型的对象和结构呈现到控制台,不管是匿名的还是非匿名的
最初,当我搬到Visual Studio 2010时,我尝试使用委托来创建我自己的Dump
方法,以获取匿名类型的值,等等。虽然这变得相当复杂,虽然一开始很有趣,很有教育意义,但我需要一个可靠的实现。在中检查了LINQPad代码之后,我更加确信我不会得到正确的实现
是否有免费的库可以提供转储功能?查看此处(您的路径可能会有所不同):
C:\Program Files(x86)\Microsoft Visual Studio 10.0\Samples\1033\CSharpSamples.zip\LinqSamples\ObjectDumper我为对象编写了一个扩展方法,该方法使用Json.Net序列化程序和pretty format选项。JSON在这样的格式下很容易阅读。你错过了类型信息,但我不知道你需要它,特别是考虑到这是多么容易。还没有让我失望。我使用Json.Net而不是MS,因为它能够处理复杂图形中的循环引用,而MS在我想到它的时候不能,或者没有
using Newtonsoft.Json;
public static class Dumper
{
public static string ToPrettyString(this object value)
{
return JsonConvert.SerializeObject(value, Formatting.Indented);
}
public static T Dump<T>(this T value)
{
Console.WriteLine(value.ToPrettyString());
return value;
}
}
使用Newtonsoft.Json;
公共静态类转储程序
{
公共静态字符串ToPrettyString(此对象值)
{
返回JsonConvert.SerializedObject(值,格式化.缩进);
}
公共静态T转储(此T值)
{
WriteLine(value.ToPrettyString());
返回值;
}
}
还有一个NuGet软件包。的来源是)并介绍了如何从C#和VB.NET调用LINQPad转储实现:
public static string DumpToHtmlString<T>(this T objectToSerialize)
{
string strHTML = "";
try
{
var writer = LINQPad.Util.CreateXhtmlWriter(true);
writer.Write(objectToSerialize);
strHTML = writer.ToString();
}
catch (Exception exc)
{
Debug.Assert(false, "Investigate why ?" + exc);
}
return strHTML;
}
public静态字符串DumpToHtmlString(此T objectToSerialize)
{
字符串strHTML=“”;
尝试
{
var writer=LINQPad.Util.CreateXhtmlWriter(true);
writer.Write(objectToSerialize);
strHTML=writer.ToString();
}
捕获(异常exc)
{
Assert(false,“调查原因?”+exc);
}
返回strHTML;
}
+1非常方便的课程。我从来不知道那件事。我将把它复制到我的调试工具库中。ThanksI编译了它并将其添加为对我的项目的引用,但我在尝试构建时出错-ObjectDumper在当前上下文中不存在。你怎么称呼它?写是一个扩展方法还是一个静态方法。抱歉,我是C#的新手。编写者是可识别的。这个问题不应该被关闭,因为它没有引起辩论、争论、投票或扩展讨论。我从这里看到linqpad中的dump方法:--,我认为这是linqpad中使用的一个非常特殊的方法,所以我认为在真正的C#中没有简单的方法。正如它的描述,它可以自动将img转换为img,日历转换为日历,后面的真实代码中肯定有很多对象类型决策,我看了一下ObjectDumper,它最后使用了Write方法,即使用TextWriter类,所以我认为它所做的只是把所有的对象都写进字符串,也许不是你想要的。你已经看过这里了吗?要进一步模拟LINQPad的Dump()方法,请将此扩展方法添加到类:public static T Dump(此T值){Console.WriteLine(value.ToPrettyString());return value;}