我将值存储为DataTable中的字符串,其中每个值实际上可以表示intdoublestring (它们在从外部数据源导入过程中都转换为字符串)。 我需要测试并查看每个值的实际类型。

什么对应用程序更有效(或没有实际差异)?

  1. 尝试转换为int (然后double )。 如果转换有效,则返回true 如果抛出异常,则返回false
  2. 正则表达式旨在匹配intdouble的模式
  3. 其他一些方法?

===============>>#1 票数:10 已采纳

会使用double.TryParse,它具有性能优势。

===============>>#2 票数:6

我会说,不要太担心这种微观表现。 最好只是让一些东西工作,然后使它尽可能清晰,简洁和易读。 你可以做的最糟糕的事情就是牺牲可读性以获得微不足道的性能。

最后,处理性能问题的最佳方法是在有数据表明存在实际性能问题时保存它们...否则您将花费​​大量时间进行微优化,实际上会导致更高的维护成本稍后的。

如果您发现这种解析情况确实是应用程序中的瓶颈,那么现在是时候尝试找出解决问题的最快方法了。 我认为Jeff(以及其他许多人)已经在博客上发表了很多关于此类事情的文章。

===============>>#3 票数:5

你遇到的麻烦是,可能会出现答案可能是三种类型的情况。

3可以是int,double或string!

这取决于你想要做什么以及它们是一种特殊类型的重要性。 可能最好只要你可以保留它们,或者,有一些方法来标记每一个(如果你能控制原始字符串的来源)。

===============>>#4 票数:5

根据您是否使用优化进行编译,您将获得不同方法的不同结果。 你基本上有几个选择:

object o;

//checking with is
o is int

//check type
o.GetType() != typeof( int )

//cast and catch exception
try{ int j = (int) o; } 
catch {}

//use the tryparse
int.TryParse( Convert.ToString( o ), out j )

您可以轻松设置一个控制台应用程序,该应用程序尝试每次10,000次,并为每个应用程序返回持续时间(当o为int时测试,何时为其他测试)。

如果对象确实持有int,则try-catch方法最快,如果不包含int,则最慢(甚至比GetType慢)。 如果你有一个字符串, int.TryParse很快,但如果你有一个未知的对象,它会慢一些。

有趣的是,使用.Net 3.5和优化启用o is int检查与try-catch实际是一个int。 o is int如果o实际上是其他东西, o is int仅略慢。

令人讨厌的是,如果您执行以下操作,FxCop会发出警告:

if( o is int )
    int j = (int) o;

但我认为这是FxCop中的一个错误 - 它不知道int是一个值类型,并建议你使用o as int

如果您的输入始终是字符串int.TryParse是最好的,否则is运算符是最快的。

当你有一个字符串时,我会看你是否需要知道它是一个int而不是一个double。 如果int.TryParse通过,那么这样会double.TryParse所以你可以检查数量的一半-当你想到一个int返回双人床或字符串和地面双打。

===============>>#5 票数:3

我个人使用int.tryparse,然后是double.tryparse。 这些方法的表现非常快。 它们都返回一个布尔值。 如果两者都失败,那么根据您定义数据的方式,您有一个字符串。

  ask by Yaakov Ellis translate from so

未解决问题?本站智能推荐: