【发布时间】:2013-05-29 14:56:48
【问题描述】:
我想知道是否有更美观/更易于阅读的方式来编写以下内容:
for (int i = 0; i < 100; i++)
{
// If m.GetString(i) throws an exception, continue.
// Otherwise, do stuff.
try
{
string s = m.GetString(i);
continue;
}
catch (InvalidCastException)
{
}
// do stuff with the message that you know is not a string.
}
这是 m 的样子:
msg[0] = 10
msg[1] = "string"
msg[2] = 2.224574743
// Etc.
// Assume it's different every time.
因此,当我在本例中执行m.GetString(0) 时,它会引发异常,因为msg[0] 是uint 而不是string。这是我用来获取类型的,因为m 不包含 GetType,我无法编辑 m。
m 是我无法编辑的库中 Message 类的实例。
然而,尽管这工作得很好,但为了获取类型而故意创建异常(即使它在 try-catch 中)感觉效率低下(当然也不利于读者)。
有更好的方法还是我坚持这个?
编辑:好的,我对Message 类进行了更多研究(我应该一开始就这样做,我很抱歉)。这是一个IEnumerable<object>
【问题讨论】:
-
如果你可以避免异常,你应该......异常会增加开销
-
您应该找出 m.GetString() 抛出的异常类型(假设您无法访问其背后的代码并在没有异常的情况下处理它)然后只捕获该类型的异常。抓住每一个可能的异常并继续下去并不好
-
m的类型是什么? -
您能否修改 GetString 以避免抛出异常并返回 null 以防万一它不是字符串并且排除 null 字符串或指示值是否为字符串 + 输出参数的布尔值以返回该值字符串
-
就像 Matthew 说的,m 是什么?您总是可以将项目放入对象变量中,然后执行 gettype。
标签: c# optimization code-readability