Sha*_*pta 4 .net c# types casting type-conversion
我试图在类型转换方法之间找到区别.
例如.
方法1
public byte fun()
{
object value=1;
return (byte)value; // this gives me error
}
Run Code Online (Sandbox Code Playgroud)
方法2
public byte fun()
{
object value=1;
return byte.Parse(value.ToString()); // this runs
}
Run Code Online (Sandbox Code Playgroud)
方法3
public byte fun()
{
object value=1;
return Convert.ToByte(value); // this runs
}
Run Code Online (Sandbox Code Playgroud)
这三者之间有什么区别.他们如何在内部工作.这里的值类型和参考类型是什么.哪个函数可以将值类型转换为ref类型,反之亦然
编辑2
当我写这行时,默认情况下int32,byte或其他什么数据类型'1'将被处理.
对象值= 1;
这里有很多问题.
方法1失败,因为您无法在单个操作中执行unbox和转换.您将"值"设置为盒装整数.当您尝试进行强制转换时,您将取消装箱整数并尝试在单个操作中强制转换为一个字节,但这会失败.这确实有效,顺便说一下:
return (byte)( (int)value) ); // Unbox, then cast, in two operations
Run Code Online (Sandbox Code Playgroud)
方法2的作用是因为您将整数转换为字符串,然后使用byte.Parse将其转换为字节.这是非常昂贵的,因为它是来自/来自字符串.
方法3之所以有效,是因为它看到值中的对象是IConvertible(int),并使用适当的转换操作转换为byte.在这种情况下,这可能是一种更有效的方法.由于"value"存储一个int,而int支持IConvertible,Convert.ToByte基本上会进行空检查,然后调用Convert.ToByte(int),这是非常快的(它确实绑定了检查,并且直接转换).
我建议阅读Eric Lippert的博客文章" Representation and Identity".它详细介绍了铸造,并解释了方法1失败的原因......
| 归档时间: |
|
| 查看次数: |
2455 次 |
| 最近记录: |