c#中对象的类型转换

本文关键字:类型转换 对象 | 更新日期: 2023-09-27 18:03:33

假设我有一个方法返回类a的对象

A getItem(int index)

现在我有以下一行代码,(我假设BA的子类)

B b = (B) obj.getItem(i);

但在此之前我必须确保我可以将其类型转换为B因为getItem可以返回其他子类的对象,比如AC

像这样

    if(I can typecast obj.getItem(i) to B) {
             B b = (B) obj.getItem(i);
    }

我该怎么做?

c#中对象的类型转换

两个选项:

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());
}