内嵌显示方法可用于快速检查
通常,在研究我正在开发的某些代码时,我会在此处或那里插入一个 Console.WriteLine
,以便在程序运行时看到一个值。 Console.WriteLine
的缺点是我必须将表达式括在括号中,并可能将其分开。例如,给定这个表达式:
a().b().c();
假设我想打印 b()
的值。我必须做类似的事情:
var val = a().b();
Console.WriteLine(val);
val.c();
为了查看一个值,需要进行大量的编辑。
我的解决方案是使用此扩展方法:
public static T Disp<T>(this T obj)
{
Console.WriteLine(obj);
return obj;
}
我可以在任何方法链中注入对 Disp 的调用,而无需更改整个表达式的值。要查看上面示例中 b()
的结果,我会这样做:
a.().b().Disp().c()
我的问题是,.NET 中是否已经存在像 Disp
这样的方法?有没有更好的方法来实现Disp?这种技术有缺点吗?
更新 2012-02-09
我还添加了一个接受格式字符串的重载版本:
public static T Disp<T>(this T obj, string format)
{
Console.WriteLine(string.Format(format, obj));
return obj;
}
Often, while investigating some code I'm developing, I'll throw in a Console.WriteLine
here or there too see a value when the program is run. The drawback to Console.WriteLine
is that I have to wrap an expression in parenthesis and possibly break it apart. For example given this expression:
a().b().c();
let's suppose I want to print the value of b()
. I'll have to do something like:
var val = a().b();
Console.WriteLine(val);
val.c();
That's alot of editing just to see a value.
My solution has been to use this extension method:
public static T Disp<T>(this T obj)
{
Console.WriteLine(obj);
return obj;
}
I can inject a call to Disp
in any method chain without altering the value of the overall expression. To see the result of b()
in the above example, I'd do:
a.().b().Disp().c()
My question is, is there already some method like Disp
in .NET? Is there a better way to implement Disp
? Are there drawbacks to this technique?
update 2012-02-09
I also added an overloaded version which accepts a format string:
public static T Disp<T>(this T obj, string format)
{
Console.WriteLine(string.Format(format, obj));
return obj;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为它没有问题,尽管您可能会考虑使用
Action
参数使其更通用:这类似于 Tap 在 Ruby 中。
您可以执行以下操作,而不是使用
Dump
方法:I don't see a problem with it, although you might consider making it more general with an
Action<T>
parameter:This is similar to Tap in Ruby.
Instead of your
Dump
method you can then do:LINQPad 正是以这种方式使用
Dump
扩展方法。所有扩展方法都有一个共同的缺点:
LINQPad uses a
Dump
extension method in exactly this way.The only downsides are common to all extension methods: