c#中对象的类型转换
本文关键字:类型转换 对象 | 更新日期: 2023-09-27 18:03:33
假设我有一个方法返回类a的对象
A getItem(int index)
现在我有以下一行代码,(我假设B
是A
的子类)
B b = (B) obj.getItem(i);
但在此之前我必须确保我可以将其类型转换为B
因为getItem
可以返回其他子类的对象,比如A
的C
像这样
if(I can typecast obj.getItem(i) to B) {
B b = (B) obj.getItem(i);
}
我该怎么做?
两个选项:
object item = obj.getItem(i); // TODO: Fix method naming...
// Note: redundancy of check/cast
if (item is B)
{
B b = (B) item;
// Use b
}
或:
object item = obj.getItem(i); // TODO: Fix method naming...
B b = item as B;
if (item != null)
{
// Use b
}
请参阅"在CLR中强制转换与使用'as'关键字"以获得两者之间更详细的比较。
var item = obj.GetItem(i);
if(item is B) {
B b = (B) item;
}
用as
代替:
B b = obj.getItem(i) as B;
if(b != null)
// cast worked
as操作符类似于强制转换操作。但是,如果转换不可能,则
as
返回null
,而不是引发异常。
尝试as
关键字。见https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx
Base b = d as Base;
if (b != null)
{
Console.WriteLine(b.ToString());
}