将数字强制转换为字符串的最佳方式
本文关键字:字符串 最佳 方式 转换 数字 | 更新日期: 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);
如果您不知道装箱类型是否为假定类型,则使用is
和as
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
。