首页 新闻 赞助 找找看

C# Guid 为什么是New出来而不能强制转化?

0
[待解决问题]

比如已知string 型Guid:var str="00000000-0000-0000-0000-0000000001"

var guid=(Guid)str; 报错。

而 var guid=new Guid(str); 就不报错了。

这是为什么?

一般的变化可以被强制转化类型。而Guid 就不能这样作。

C# Guid 为什么是New出来而不能强制转化?

wunaigong的主页 wunaigong | 初学一级 | 园豆:4
提问于:2011-11-27 09:07
< >
分享
所有回答(6)
0

类型可以强制转换,一般是因为他们的类型是有父子关系的关系的。并不是什么类型都可以转换的。你这个是可以要通过构造函数来转换的。

小小刀 | 园豆:1991 (小虾三级) | 2011-11-27 14:21
0

  强制转换有条件的.比如 string s ="123" ; (int)s 这样也会报错. 另外这样转换是不安全的.有可能会抛异常,最好的方法是

  Guid guid;     Guid.tryParse(str,out guid) ;  这样比较好.转换失败了也不会抛异常.    www.ia00.com

ia00.com | 园豆:568 (小虾三级) | 2011-11-27 19:49

这个 我也是这样用的

支持(0) 反对(0) 心明若玻璃 | 园豆:200 (初学一级) | 2011-12-28 12:16
0

因为它们本来就是两个不同的类型,同时又没有显式或隐式的转换申明.

但是如果可以重载 Guid 的 = 操作符号,让下面的代码运行:

Guid guid = str;

Launcher | 园豆:45045 (高人七级) | 2011-11-28 09:21
0

楼上说了,强制类型转换是有条件的,条件苛刻而且不安全。一般情况下强制转化都是又低转高,像

int i = 123;
double d = (double)i;

对于Guid虽然可以用string类型接值,但实际上并不是同一类型,所以不能直接转换

叶木木 | 园豆:252 (菜鸟二级) | 2011-11-28 10:22
0

 Guid.Parse(),这个也可以的。

悟行 | 园豆:12559 (专家六级) | 2011-11-28 13:39
0

这个楼主可以看看 c#中有关操作符的内容,我想在Guid和string之间,是没有对应的显示转换和隐式转换的。

chenping2008 | 园豆:9836 (大侠五级) | 2011-11-28 16:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册