我正在查看the following question, comparing casting to converting,其中基本上说明了(通过所有答案),如果您知道对象是字符串,请使用(string)
而不是.ToString()
。
这让我思考 - 如果你的对象可能是一个字符串或int怎么办?或知道它的字符串也扩展为整数?
此规则是否也适用于byte
? (之前有意使用过bit
)
修改
This answer显示了将整数转换为字符串的许多方法,但仍然无法解释实际使用的是什么。
答案 0 :(得分:2)
如果你有一个int类型但被装箱作为对象的对象,你可以将它转换回来:
object myBoxedStr = "stringvalue";
string unboxedStr = (string)myBoxedStr;
http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
如果你有一个包含int值的字符串,你可以解析(或tryparse)它
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;
}
答案 1 :(得分:2)
具体来说,将数字转换为字符串不会产生任何实际问题,因为任何数字都可以表示为字符串(重要提示:并非每个字符串都可以表示表示为数字!例如,您如何表达" banana"作为数字?)
string mystring = mynumber.ToString();
每次都有效,但不会失败(假设您使用可空类型时非空值)。
同样的方法适用于任何基本类型,以及其他一些类型(DateTime,StringBuilder,...)
将从字符串转换为数字可能会出现问题。通常不是相反的方式。
编辑如果你想利用直接(string)
投射,以防你的起始对象已经是一个字符串,这可能会有所帮助吗?
string mystring = (myobject as string) ?? myobject.ToString();
myobject as string
将尝试直接将对象强制转换为字符串。如果失败,则返回null
。
?? myobject.ToString()
然后确保,如果先前的尝试导致null,则将常规.ToString()
方法称为后备方案。
答案 2 :(得分:1)
该问题的结论是,如果你知道你的价值实际上是你想要的类型,那么你应该投下它(例如(int)
)。这有几个好处:它是有效的,它清楚地表达了你的意图,如果你的推定是假的,它将显着失败。
当您不知道所需类型的值时,或者当您不知道它的类型时,可以使用其他类型的转换。例如,如果您有一个字符串数组,则不应使用(int)
,而应使用ParseInt
及其类似字符串。如果您有object
个数组,其中一些是int
个,那么as
运算符可能就是您想要的。
答案 3 :(得分:0)
string name = GetSql["username"].ToString();
此代码运行缓慢。因为对象(object,int,double等)要进行字符串转换操作。
string name = (string)GetSql["username"];
此代码运行速度非常快。因为不转换操作只是类型名称。
int to string convert。
1 - )
var number = 0;
int.TryParse("213", out number);
最好使用TryParse方法,因为它可以阻止错误发生。
2 - )
var number = int.Parse("123");
答案 4 :(得分:0)
我认为最好的选择,如果你强烈怀疑它是一个字符串,但实际上不确定,是这样的:
string valueString = value is string ? (string) value : (value ?? string.Empty).ToString();
答案 5 :(得分:0)
我的经验是,最佳演员/转换是通过Convert
课程归档的。这就是C#期待你的方式。那堂课关心你通常会做的那些丑陋的事情。
当您进行类型转换或仅进行类型转换时,它甚至会将float
舍入为int
。