在C#中对一个对象进行类型转换

Val*_*ade 0 c#

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

A getItem(int index)

现在我有以下代码行,(我假设B是子类A)

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

但是在这之前我必须确保我可以强制转换成B作为getItem可以返回一些其他子类的对象,说CA

像这样的东西

    if(I can typecast obj.getItem(i) to B) {
             B b = (B) obj.getItem(i);
    }
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

Jon*_*eet 5

两种选择:

object item = obj.getItem(i); // TODO: Fix method naming...
// Note: redundancy of check/cast
if (item is B)
{
    B b = (B) item;
    // Use b
}
Run Code Online (Sandbox Code Playgroud)

要么:

object item = obj.getItem(i); // TODO: Fix method naming...
B b = item as B;
if (item != null)
{
    // Use b
}
Run Code Online (Sandbox Code Playgroud)

有关两者之间更详细的比较,请参阅"在CLR中使用'as'关键字进行转换和使用'.