这篇文章包括这段代码:
public static string SerializeDTO(DTO dto) {
try {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
catch(Exception ex) {
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
本文的其余部分看起来很合理(对于菜鸟),但是try-catch-throw会抛出一个WtfException ... 这不完全等同于根本不处理异常吗?
人机工程学:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)
或者我错过了C#中错误处理的基本内容?它与Java几乎相同(减去已检查的异常),不是吗?......也就是说,他们都改进了C++.
Stack Overflow问题重新抛出无参数捕获和不执行任何操作之间的区别?似乎支持我的观点,即try-catch-throw是一个无操作.
编辑:
只是为了总结未来发现这个主题的人...
不要
try {
// Do stuff that might throw an …Run Code Online (Sandbox Code Playgroud) 我正在使用Reflection从DataRows构造任意对象,当橡胶最终遇到道路时,我需要从DataRow获取一个值并将其分配给对象上的属性.
由于DataRows可能包含不支持转换的类型,因此其中许多都会导致必须处理的异常.例如,DBnulls可能会在DataRow中出现,或者某种数字格式不能很好地转换为另一种,等等.有什么办法可以避免抛出异常吗?(我不会接受巨大的switch语句来检查目标对象属性和源数据中每种类型的组合.)
public void Merge(DataRow data)
{
PropertyInfo[] props = this.GetType().GetProperties(BindingFlags...);
foreach (PropertyInfo pi in props.Where(p => T_IsPrimitive(p.PropertyType)))
{
object src = null;
if( dataAsDataRow.Table.Columns.Contains(pi.Name) )
src = ((DataRow)data)[pi.Name];
if (src != null)
{
if( src.GetType() != pi.PropertyType ) {
try {
src = Convert.ChangeType(src, pi.PropertyType);
} catch(InvalidCastException e) {
try { src = Convert.ChangeType(src.ToString(), pi.PropertyType); }
catch { throw e; }
}
}
pi.SetValue(this, src, null);
}
}
}
public bool T_IsPrimitive(Type t)
{
return t.IsPrimitive || t == …Run Code Online (Sandbox Code Playgroud)