通常,在调查我正在开发的一些代码时,我会在这里或那里抛出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;
}
答案 0 :(得分:2)
我没有看到它的问题,尽管您可能会考虑使用Action<T>
参数使其更通用:
public static T Tap<T>(this T obj, Action<T> act)
{
act(obj);
return obj;
}
这类似于Ruby中的Tap。
您可以使用<{1}}方法代替Dump
方法:
a.().b().Tap(Console.WriteLine).c()
答案 1 :(得分:1)
LINQPad以这种方式使用Dump
扩展方法。
唯一的缺点是所有扩展方法都很常见: