回答
铸造通常是告诉,虽然它只是知道一个值是一些通用型的编译器的问题,你知道这是实际上是一个更具体的类型的。例如:
object x = "hello";
...
// I know that x really refers to a string
string y = (string) x;
有各种转换运算符。所述(typename) expression
形式可以做三件不同的事情:
- 取消装箱转换(例如,从一个装箱整数
int
) - 用户定义的转换(例如,铸造
XAttribute
到string
)内的 - 引用转换类型的层次结构(例如铸造
object
到string
)
所有这些可能会失败在执行时,在这种情况下,将引发异常。
的as
操作者,另一方面,从不抛出异常 - 相反,该转换的结果是null
如果失败:
object x = new object();
string y = x as string; // Now y is null because x isn't a string
它可用于解包到一个空值类型:
object x = 10; // Boxed int
float? y = x as float?; // Now y has a null value because x isn't a boxed float
也存在隐式转换,例如从int
到long
:
int x = 10;
long y = x; // Implicit conversion
这是否涵盖一切你感兴趣的?
好的答案乔恩! – UnkwnTech
@jon Skeet给出了答案,它并没有涵盖它发生过的所有事情? – Shrivallabh
阅读[this](http://stackoverflow.com/questions/2690866/what-is-the-purpose-of-a-question-mark-after-a-type-for-example-int-myvariabl)看到'float'类型后问号的作用。 – martijnn2008
投射意味着创建一个对象的引用,该引用与您当前拥有的引用类型不同。你可以做向上转换或向下转换,每个都有不同的好处。
上溯造型:
string greeting = "Hi Bob";
object o = greeting;
这产生从更具体的参考(字符串)的更一般的参考(对象)。也许你写的代码,可以处理任何对象,像这样:
Console.WriteLine("Type of o is " + o.GetType());
这些代码并不需要无论什么对象设置o设置为改变。
向下转换:
object o = "Hi Bob";
string greeting = (string)o;
在这里,你想更具体的参考。你可能知道,对象是一个字符串(您可以测试这个例如:
if (o is string)
{ do something }
现在你可以把参考的字符串,而不是一个对象如字符串的长度(但对象不),这样你就可以说:
Console.WriteLine("Length of string is " + greeting.length);
,你不能用一个对象做
另外,如果你明确铸造,可以利用模式匹配的。如果你有一个对象。 :
object aObject = "My string value";
你可以安全地把对象作为一个单行的字符串:
:if (aObject is string aString)
{
Console.WriteLine("aString = " + aString)
// Output: "aString = My string value"
}
用倒置if语句,你可以放心地投类型,未能早早如果需要使用此,沿
public void Conversion(object objA, object objB)
{
// Fail out early if the objects provided are not the correct type, or are null
if (!(objA is string str) || !(objB is int num)) { return; }
// Now, you have `str` and `num` that are safely cast, non-null variables
// all while maintaining the same scope as your Conversion method
Console.WriteLine("str.Length is " + str.Length);
Console.WriteLine("num is " + num);
}
- 1. 在C++中进行类型转换
- 2. 在C++类中包装C类库,并进行类型转换
- 3. 在SML中进行类型转换
- 4. 在MIPS中进行类型转换
- 5. 在Matlab中进行类型转换
- 6. 在Groovy中进行类型转换
- 7. 在c中的消息队列中进行类型转换
- 8. c#与通用类型的接口类型进行转换
- 9. 通过检测当前'this'对象类型在C++中进行类型转换
- 10. 使用泛型进行类型转换
- 11. 如何对C#中的对象类型进行强制转换?
- 12. C++中的类型转换
- 13. C#中的类型转换#
- 14. 类型转换C++
- 15. C++类型转换
- 16. C#类型转换?
- 17. C#类型转换
- 18. C#类型转换
- 19. C#类型转换
- 20. 使用numeric_std进行类型转换
- 21. 使用Python 2.7进行类型转换
- 22. 使用函数进行类型转换
- 23. JavaScript如何为==进行类型转换?
- 24. 何时需要进行类型转换?
- 25. 元函数进行类型转换
- 26. c或C++类型转换
- 27. 类型转换泛型类型C++
- 28. 在C中的类型转换
- 29. 困惑在C++中的类型转换
- 30. 在c中指针的类型转换
哈哈哈..真是个笑话!!! – MAC
我可以告诉你知道如何制定你的问题,亲爱的! –
[http://en.wikipedia.org/wiki/Type_conversion](http://en.wikipedia.org/wiki/Type_conversion) – Raghav