比如已知string 型Guid:var str="00000000-0000-0000-0000-0000000001"
var guid=(Guid)str; 报错。
而 var guid=new Guid(str); 就不报错了。
这是为什么?
一般的变化可以被强制转化类型。而Guid 就不能这样作。
C# Guid 为什么是New出来而不能强制转化?
类型可以强制转换,一般是因为他们的类型是有父子关系的关系的。并不是什么类型都可以转换的。你这个是可以要通过构造函数来转换的。
强制转换有条件的.比如 string s ="123" ; (int)s 这样也会报错. 另外这样转换是不安全的.有可能会抛异常,最好的方法是
Guid guid; Guid.tryParse(str,out guid) ; 这样比较好.转换失败了也不会抛异常. www.ia00.com
这个 我也是这样用的
因为它们本来就是两个不同的类型,同时又没有显式或隐式的转换申明.
但是如果可以重载 Guid 的 = 操作符号,让下面的代码运行:
Guid guid = str;
楼上说了,强制类型转换是有条件的,条件苛刻而且不安全。一般情况下强制转化都是又低转高,像
int i = 123;
double d = (double)i;
对于Guid虽然可以用string类型接值,但实际上并不是同一类型,所以不能直接转换
Guid.Parse(),这个也可以的。
这个楼主可以看看 c#中有关操作符的内容,我想在Guid和string之间,是没有对应的显示转换和隐式转换的。