当前位置:  开发笔记 > 编程语言 > 正文

为什么(string)int32总是抛出:无法将类型'int'转换为'string'

如何解决《为什么(string)int32总是抛出:无法将类型'int'转换为'string'》经验,为你挑选了5个好方法。

为什么(string)int32总是抛出:无法将类型'int'转换为'string'

public class Foo
    {   
        private int FooID;
        public Foo()
        {
            FooID = 4;
            string s = (string)FooID; //throws compile error
            string sss = FooID.ToString(); //no compile error
        }
    }

mqp.. 39

因为没有从Int32到string定义的类型转换.这就是ToString方法的用途.



1> mqp..:

因为没有从Int32到string定义的类型转换.这就是ToString方法的用途.



2> Martin Brown..:

如果你这样做:

string s = (string)70;

你期望在s?

答:"70"这个数字的编写方式与人类阅读它的方式相同.
B."+ 70"前面写有正面指示的数字.
C."F"由ASCII码70表示的字符.
D."\ x00\x00\x00F"int的四个字节分别转换为它们的ASCII表示.
E."\ x0000F"将int分成两组,每组两个字节,每个字节代表一个Unicode字符.
F."1000110"的二进制表示为70.
G."$ 70"整数转换为货币
H.其他.

编译器无法分辨,因此它可以让您做到很长的路要走.

有两个"长路".第一种是使用Convert.ToString()重载之一,如下所示:

string s = Convert.ToString(-70, 10);

这意味着它将使用基数10表示法将数字转换为字符串.如果数字为负数,则在开头显示" - ",否则只显示数字.但是,如果转换为二进制,八进制或十六进制,则负数将以二进制补码显示,因此Convert.ToString(-7,16)变为"ffffffba".

另一个"漫长的方法"是使用ToString和字符串格式化程序,如下所示:

string s2 = 70.ToString("D");

D是格式化程序代码,它告诉ToString方法如何转换为字符串.下面列出了一些有趣的代码:

"D"十进制格式,如果需要,为数字0-9,开头为" - ".例如-70变为"-70".
"D8"我已经显示了8但可能是任何数字.与十进制相同,但它用零填充到所需的长度.例如-70变为"-00000070".
插入"N"千个分隔符,最后添加".00".例如-1000变为"-1,000.00".
"C"在" - "之后的开头添加货币符号,然后它与"N"相同.例如,使用en-Gb培养-1000变为" - £1,000.00".
"X"十六进制格式.例如-70变为"46".

注意:这些格式取决于当前的文化设置,因此如果您使用en-Us,则在使用格式代码"C"时将获得"$"而不是"£".

有关格式代码的详细信息,请参阅MSDN - 标准数字格式字符串.


答案,在我看来:)不是每个人都希望字符串为70,特别是那些在网络级别工作的人,等等
"你期望在s中做什么?" =>如果它可能是`((int)70).ToString()`的结果会很好

3> Dan Herbert..:

当执行(string)30类似的强制转换操作时,你基本上告诉计算机"这个对象与我正在投射的对象相似,我不会丢失太多(或任何)数据/功能".

将数字转换为字符串时,数据中存在"丢失".字符串不能执行数学运算,也不能执行数字相关的操作.

这就是为什么你可以这样做:

int test1 = 34;
double test2 = (double)test1;

但不是这个:

int test1 = 34;
string test2 = (string)test1;

这个例子并不完美,因为(IIRC)这里的转换是隐含的,但是想法是当转换为double时,你不会丢失任何信息.无论是a double还是a,该数据类型仍然可以基本上起作用int.同样不能说a int到a string.

只有在转换完成后不会丢失太多功能时,才允许(通常)进行转换.

.ToString()方法与强制转换不同,因为它只是一种返回string数据类型的方法.



4> tsilb..:

Int没有明确的字符串运算符.但是,他们有Int32.ToString();. 也许你可以用扩展方法创建一个,如果你真的想.



5> el2iot2..:

只是另一个注意事项:一般来说,如果你想做这样的显式转换(我同意这里的许多其他答案,为什么它需要显式转换)不要忽略转换类型.它专为这些原始/简单类型转换而设计.

我知道,当从C#开始(并且来自C++)时,我发现自己遇到了类型转换,看起来它们应该有效.当涉及到这类事情时,C++会更加自由,所以在C#中,设计师希望您知道何时类型转换模糊或不明智.然后,转换类型允许您显式转换和理解副作用,从而填补空白.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有