将数字强制转换为字符串的最佳方式

本文关键字:字符串 最佳 方式 转换 数字 | 更新日期: 2023-09-27 18:01:48

我在看下面的问题,比较强制转换和转换,这基本上说明(通过所有答案(,如果你知道你的对象是一个字符串,请使用(string)而不是.ToString()

这让我思考——如果你的对象可能是字符串或int怎么办?或者知道它是一个字符串也可以扩展到整数吗?

这个规则也适用于byte吗?(先前偶然使用bit(

编辑
这个答案显示了许多将整数转换为字符串的方法,但这仍然不能解释该使用哪种方法。

将数字强制转换为字符串的最佳方式

具体来说,将数字强制转换为字符串不会产生真正的问题,因为任何数字都可以表示为字符串(重要提示:不是每个字符串都可以表示成数字!例如,如何将"香蕉"表示为数字?(

string mystring = mynumber.ToString();

每次都能正常工作(如果使用可为null的类型,则假设为非null值(。

同样的方法适用于任何基元类型,以及其他一些类型(DateTime、StringBuilder…(

从字符串到数字的转换是有问题的。通常不会反过来。

编辑如果您想在起始对象已经是字符串的情况下利用直接(string)强制转换,也许这会有所帮助?

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

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

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

如果您有一个类型为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;
}

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

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

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

此代码运行缓慢。因为object(object、int、double等(到字符串的转换操作。

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

这个代码运行得很快。因为不转换操作只有类型指定。

int到字符串的转换。

1-(

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

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

2-(

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

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

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

我的经验是,最佳的投射/转换是通过Convert类归档的。这就是C#对你的期望。那个班人关心你通常会做的那些丑陋的事情。当您进行类型转换或简单的类型转换时,它甚至会将float舍入为int