【问题标题】:Best way to cast/convert number to string将数字转换/转换为字符串的最佳方法
【发布时间】:2014-06-21 18:48:19
【问题描述】:

我在看the following question, comparing casting to converting,它基本上说(通过所有答案),如果你知道你的对象是一个字符串,请使用(string) 而不是.ToString()

这让我开始思考——如果你的对象可能是一个字符串或整数呢?或者知道它是一个字符串是否也扩展到整数?

这条规则是否也适用于byte? (之前不小心用了bit

编辑
This answer 展示了许多将整数转换为字符串的方法,但这仍然没有解释真正使用哪种方法。

【问题讨论】:

  • 建议:编写一个程序,看看它们的表现如何。我的猜测是出于所有实际目的,这并不重要。这一切都归结为风格以及对您和与您合作的其他开发人员最有意义的东西。
  • @drew_w 用于速度测试或基准测试,编写应用程序肯定会成功。但是,我不知道在 CLR 中调用了多远,并且想知道是否有任何方法明显优于其他方法。
  • 我很困惑。您似乎在第一段中引用了您问题的答案。如果您不知道对象是字符串还是 int,那么您显然不知道您的对象是字符串,因此您不能只是强制转换。而且我不确定bit 是什么意思。据我所知,c# 没有其中之一...
  • 对不起 - 我的意思是字节 - 我实际上是在考虑 SQL 调用。

标签: c# string int


【解决方案1】:

具体来说,将 number 转换为 string 并没有真正的问题,因为任何数字都可以表示为字符串(重要提示:但是,并非每个字符串都可以表示为数字!例如,您如何将“香蕉”表示为数字?)

string mystring = mynumber.ToString();

每次都有效,不会失败(假设非空值,以防您使用可空类型)。

同样的方法适用于任何原始类型,以及其他一些类型(DateTime、StringBuilder、...)

从字符串到数字的转换可能会出现问题。通常不会反过来。

编辑如果您想利用直接(string) 转换以防您的起始对象已经是一个字符串,也许这会有所帮助?

string mystring = (myobject as string) ?? myobject.ToString();

myobject as string 将尝试直接将对象转换为字符串。如果失败,则返回null

?? myobject.ToString() 然后确保在之前的尝试导致 null 的情况下,将常规的 .ToString() 方法作为备用方案调用。

【讨论】:

  • 这是一个非常优雅的解决方案!谢谢:)
  • 没问题 :) 不过要小心空值。您可能需要事先检查 null ,否则优雅的解决方案会变得......不太优雅;)
【解决方案2】:

如果你有一个 int 类型的对象但被装箱为一个对象,你将它转换回来:

object myBoxedStr = "stringvalue";
string unboxedStr = (string)myBoxedStr;

http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

如果您有一个包含 int 值的字符串,则解析(或尝试解析)它

string myIntStr = "5";
int myInt = int.Parse(myIntStr);

如果您不知道装箱类型是否是您使用isas 的假定类型

object assumedMyType = new MyType();
MyType myType = assumedMyType as MyType;

如果转换失败,as 关键字返回 null(而不是抛出异常)

使用 is 关键字,您可以在转换之前检查假定的类型是否正确

object assumedInt = 5;
if(assumedInt is int)
{
    int myInt = (int)assumedInt;
}

【讨论】:

  • 这个答案指向我的问题所在的方向。
  • 这些是我在决定使用哪种技术进行转换/转换时使用的“规则”。我还考虑了我是否希望代码抛出异常(例如 parse 或 tryparse)
【解决方案3】:

从这个问题中得出的结论是,如果你知道你的值实际上是你想要的类型,那么你应该转换它(例如(int))。这有几个好处:它很有效,它清楚地表达了你的意图,如果你的假设是错误的,它会明显失败。

当您不知道您想要的类型的值,或者您知道它不是时,您会使用其他类型的转换。例如,如果您有一个字符串数组,则不应使用(int),而应使用ParseInt 及其同类。如果你有一个objects 数组,其中一些是ints,那么as 运算符可能就是你想要的。

【讨论】:

  • 我总是这样想:如果你已经知道值应该是整数,那为什么类型不是整数呢?如果值是用户输入的文本字符串,我喜欢始终保护自己免受用户的伤害并使用 Parse 或 TryParse。
  • 你可以想出一些例子,即使类型不能保证,你也可以合理地依赖整数值。一种常见的情况是组件之间的接口。 C# 中的强制转换应该不常见,因为该语言的安全转换运算符和对泛型的强大支持消除了强制转换的常见用途。
【解决方案4】:
string name = GetSql["username"].ToString();

此代码运行缓慢。因为 object(object, int, double etc.) 到字符串的转换操作。

string name = (string)GetSql["username"];

这段代码运行速度非常快。因为不转换操作只是类型指定。

int 到字符串的转换。

1-)

var number = 0;
int.TryParse("213", out number);

最好使用 TryParse 方法,因为它可以阻止错误发生。

2-)

var number = int.Parse("123");

【讨论】:

    【解决方案5】:

    如果您强烈怀疑它是一个字符串,但实际上并不确定,我认为最好的选择是这样的:

    string valueString = value is string ? (string) value : (value ?? string.Empty).ToString();

    【讨论】:

    • 如果我错了,请纠正我,但最后一部分是将 Value 设置为 String.Empty 如果 value 为 null?
    • 是的;如果你想要一个 NullReferenceException,或者你确定它不为空,你可以跳过它。
    【解决方案6】:

    我的经验是,最好的演员/转换是通过Convert 类存档的。这就是 C# 对您的期望。那个班级关心你通常会做的所有丑陋的事情。 当您进行类型转换或简单类型转换时,它甚至会将 float 舍入到 int

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 2018-05-28
      • 2011-12-27
      • 2017-07-26
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多