String s = (String)4; 能不能这样将int类型的数强制转换为String类型
6个回答
展开全部
这是对C#类型转换不熟悉造成的!
强制转换与平稳转换是指将内存运行类型与当前指针类型之间的转换。
如:int i =4;
long p = (long)4;
运行中的是数值型,是可以进行强制转换的。一般在程序中都是父类型与子类似之间的转换。
如果B类继承于A类,
A p = new B();
p是指针类型A,而实现运行时,p指向的堆中却是一个B类型,所以我们称运行时类型,这两者之间可以使用强制转换的。如:B q = (B)p;。但是,如果是
A p = new A();B q = (B)p;是错误的。只能是是运行态类型的不同变化。
所以你可以认为强制转换是一种运行态类型的不同角色扮演——运行态子类似可以扮演继承的父类型或是接口类型。但父类型不能转换为子类型,转换本身取决于运行态的类型。
as typeof()是一种平稳的转换,与强制转换是一样的,只不过不能转换时自动转为null(VB中为Nothing)。 经常见到这种形式: datarow[0] as string,等等。如果datarow[0]运行类型是int,如果直接使用(string)datarow[0]会出现错误[如果存在值,其实是利用了tostring转换的],如果null的情况下,(string)null肯定是会报错的,如果(int)datarow[0]中datarow[0]运行态是string的话,一定会报错,这个是因为string比较特殊。因为所以的对象都继承了object的tostring方法。除了string外,只能是运行态类型的不同角色扮演。但是用as 则会直十平稳了!
datarow[0] as string,如果是null时,并不会报错。会变成null的string结构。所以这两个方法的转换并非是解析级的转换。
IConvert接口实现解析级别的转换,如Convert.ToInt32("123")这种就是可以将其他的数据进行转换,而不在意你运行时内存中的类型。如:int.Parse("123")其实它是Convert.ToInt32来实现的!它才是只真的类型之间的转换。将一个类型转换为另一个类型。而强制转换与平稳转换可以认为只是转的了指针类型,并不能真正转堆中的类型,而Convert则是直接将堆中的类型转换。
string是一种特殊的类型转换,因为都继承了object的tostring接口,所以它可以实现转换,如果没有重写ToString()方法,则一般转换结果为this.GetType().ToString()的结果。
强制转换与平稳转换是指将内存运行类型与当前指针类型之间的转换。
如:int i =4;
long p = (long)4;
运行中的是数值型,是可以进行强制转换的。一般在程序中都是父类型与子类似之间的转换。
如果B类继承于A类,
A p = new B();
p是指针类型A,而实现运行时,p指向的堆中却是一个B类型,所以我们称运行时类型,这两者之间可以使用强制转换的。如:B q = (B)p;。但是,如果是
A p = new A();B q = (B)p;是错误的。只能是是运行态类型的不同变化。
所以你可以认为强制转换是一种运行态类型的不同角色扮演——运行态子类似可以扮演继承的父类型或是接口类型。但父类型不能转换为子类型,转换本身取决于运行态的类型。
as typeof()是一种平稳的转换,与强制转换是一样的,只不过不能转换时自动转为null(VB中为Nothing)。 经常见到这种形式: datarow[0] as string,等等。如果datarow[0]运行类型是int,如果直接使用(string)datarow[0]会出现错误[如果存在值,其实是利用了tostring转换的],如果null的情况下,(string)null肯定是会报错的,如果(int)datarow[0]中datarow[0]运行态是string的话,一定会报错,这个是因为string比较特殊。因为所以的对象都继承了object的tostring方法。除了string外,只能是运行态类型的不同角色扮演。但是用as 则会直十平稳了!
datarow[0] as string,如果是null时,并不会报错。会变成null的string结构。所以这两个方法的转换并非是解析级的转换。
IConvert接口实现解析级别的转换,如Convert.ToInt32("123")这种就是可以将其他的数据进行转换,而不在意你运行时内存中的类型。如:int.Parse("123")其实它是Convert.ToInt32来实现的!它才是只真的类型之间的转换。将一个类型转换为另一个类型。而强制转换与平稳转换可以认为只是转的了指针类型,并不能真正转堆中的类型,而Convert则是直接将堆中的类型转换。
string是一种特殊的类型转换,因为都继承了object的tostring接口,所以它可以实现转换,如果没有重写ToString()方法,则一般转换结果为this.GetType().ToString()的结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string s=4;
这样可以吗? 有时候c#会自动转换 有时候不会我没具体测试
刚才实验了下
s=4;是不行的; 但是s="asd"+4;就可以 也就是说虽然s有特定类型,但是4其实是范类型 呵呵 奇妙
这样可以吗? 有时候c#会自动转换 有时候不会我没具体测试
刚才实验了下
s=4;是不行的; 但是s="asd"+4;就可以 也就是说虽然s有特定类型,但是4其实是范类型 呵呵 奇妙
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我实验过了,这样写无法转换,vs报错,string s=(4).Tostring();可以的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似不能。
string s = 4.tostring();
或者直接
string s = "4";
string s = 4.tostring();
或者直接
string s = "4";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询