- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Java 世界中,我们有 Apache Commons' ToStringBuilder帮助创建 toString() 实现。
有人知道 C# 的一个不错的免费实现吗?有没有我不知道的更好的选择?
如果不存在免费的实现,那么我猜这个问题就变成了一个“在 C# 3 中什么是好的 ToStringBuilder?”
在我的脑海中:
它可以提供反射和手动创建 ToString 字符串。
如果它能利用表达式树,那就太棒了。
像这样的..
public override string ToString()
{
return new ToStringBuilder<Foo>(this)
.Append(t => t.Id)
.Append(t => t.Name)
.ToString();
}
哪个会返回:
"Foo{Id: 1, Name: AName}"
还有其他想法吗?
更新
只是为了阐明 ToStringBuilder 与 StringBuilder 不同。我正在寻找类似于 Apache Common 的 ToStringBuilder 功能的东西,它具有多行格式、不同样式和基于反射的 ToString 创建等功能。谢谢。
更新 2
我已经建立了自己的。参见 here .
最佳答案
编辑:好的,您想要使用反射,这样您就不必键入属性名称。我认为这会让你得到你想要的:
// forgive the mangled code; I hate horizontal scrolling
public sealed class ToStringBuilder<T> {
private T _obj;
private Type _objType;
private StringBuilder _innerSb;
public ToStringBuilder(T obj) {
_obj = obj;
_objType = obj.GetType();
_innerSb = new StringBuilder();
}
public ToStringBuilder<T> Append<TProperty>
(Expression<Func<T, TProperty>> expression) {
string propertyName;
if (!TryGetPropertyName(expression, out propertyName))
throw new ArgumentException(
"Expression must be a simple property expression."
);
Func<T, TProperty> func = expression.Compile();
if (_innerSb.Length < 1)
_innerSb.Append(
propertyName + ": " + func(_obj).ToString()
);
else
_innerSb.Append(
", " + propertyName + ": " + func(_obj).ToString()
);
return this;
}
private static bool TryGetPropertyName<TProperty>
(Expression<Func<T, TProperty>> expression, out string propertyName) {
propertyName = default(string);
var propertyExpression = expression.Body as MemberExpression;
if (propertyExpression == null)
return false;
propertyName = propertyExpression.Member.Name;
return true;
}
public override string ToString() {
return _objType.Name + "{" + _innerSb.ToString() + "}";
}
}
例子:
// from within some class with an Id and Name property
public override string ToString() {
return new ToStringBuilder<SomeClass>(this)
.Append(x => x.Id)
.Append(x => x.Name)
.ToString();
}
看,你所追求的行为:
class Thing {
public int Id { get; set; }
public string Name { get; set; }
public override string ToString() {
return new ToStringBuilder<Thing>(this)
.Append(t => t.Id)
.Append(t => t.Name)
.ToString()
}
}
void Main() {
var t = new Thing { Id = 10, Name = "Bob" };
Console.WriteLine(t.ToString());
}
输出:
Thing{Id: 10, Name: "Bob"}
关于c# - 是否有等效于 Java 的 ToStringBuilder for C#?一个好的 C# 版本有什么特点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417647/
我正在运行大约 1-2 小时的多线程导入。 并在导入中,在将数据放入表中之前。我正在检查 if(debug.isEnabled()) logger.debug("Object="+MyObject)
我目前正在使用 apache commons API (commmons-lang.jar) 来打印对象值,如下所示: ToStringBuilder.reflectionToString(objec
出于调试目的,我需要在某些情况下记录所有请求参数... 我尝试使用 ToStringBuilder.reflectionToString(request),但它仍然显示内存地址 有没有简单的方法以纯文
我有一个包含多个变量的对象,但其中一个是 byteArray,例如 public class DataWithFields { private String string1; privat
我正在使用 Apache Commons 的 ToStringBuilder 来生成实体 toString 的 block 内容。但对于某些实体,存在用“ISO-8859-15”编码的字符串字段,因此
ToStringBuilder.reflectionToString(Object) 的格式是什么显示日期?根据Apache Commons Lang 2.4 documentation , ToSt
为了快写好看toString() PHP 中的方法 我正在寻找类似 ToStringBuilder 的东西Java 类。 更新:我不是在问如何使用或实现 toString() .我问的是像 ToStr
在我的类(class)中,当编写 toString() 方法时,我总是使用 org.apache.commons 中的 ToStringBuilder 当我扩展其他类时,我使用 appendSuper
我需要能够遍历我的整个对象图并记录所有成员字段的所有内容。 例如:对象 A 具有对象 B 的集合,对象 B 具有对象 C 的集合,并且 A、B、C 上有附加字段,等等。 Apache Commons
ToStringBuilder 提供了一种方便的方法来实现toString 方法,就像这样 @Override public String toString() { ret
我有一个程序可以编写大量 SQL 语句并将其压缩到一个文件中。然而,有时用户可以选择大量项目来生成 SQL 语句。例如,SQL zip 文件可能包含 4 个文件,每个文件的长度超过 100 万个字符。
有没有办法将我的输出从 ToStringBuilder 转换为回到java对象? 我正在寻找一种在可读文本文件中表示 Java 对象并能够在字符串和对象之间来回转换的简单方法。 谢谢, 最佳答案 你必
如何配置 toString 的格式设置 最佳答案 ToStringBuilder.setDefaultStyle(ToStringStyle 样式) http://commons.apache.org
我有下一个代码: File root = new File("./build/classes"); URLClassLoader classLoader = URLClassLoader.newIns
在 Java 世界中,我们有 Apache Commons' ToStringBuilder帮助创建 toString() 实现。 有人知道 C# 的一个不错的免费实现吗?有没有我不知道的更好的选择?
使用 cxf-xjc-ts 时xsdtojava期间的插件,可以添加属性 -Xts让编译器生成以下方法: import org.apache.commons.lang.builder.ToString
我是一名优秀的程序员,十分优秀!