我正試圖找到以下的替代方案,以便我可以利用is
運算符。有沒有辦法將參數傳遞給is運算符?
public bool IsOfType(Type type)
{
return this._item.GetType() == type;
}
類似下面的內容,它不會編譯。
public bool IsOfType(Type type)
{
return this._item is type;
}
我正試圖找到以下的替代方案,以便我可以利用is
運算符。有沒有辦法將參數傳遞給is運算符?
public bool IsOfType(Type type)
{
return this._item.GetType() == type;
}
類似下面的內容,它不會編譯。
public bool IsOfType(Type type)
{
return this._item is type;
}
我認爲你正在尋找Type.IsAssignableFrom
:
public bool IsOfType(Type type)
{
return _item != null && type.IsAssignableFrom(_item.GetType());
}
或者,如果你可以讓法通用的,這就是簡單,因爲你可以使用is
與一類參數:
public bool IsOfType<T>()
{
return _item is T;
}
編輯:正如在Wim的答案中指出的那樣,還有Type.IsInstanceOf
這使得非通用方法OD簡單:
public bool IsOfType(Type type)
{
return type.InstanceOf(_item);
}
你可以做多件事情,要看具體情況:
Type.IsAssignableFrom(Type)
如果你所得到的是兩個類型的實例。如果您有權訪問要比較的實例,請使用Type.IsInstanceOf(object instance)
。喜歡使用泛型:
public bool IsOfType<T>() { return this._item is T; }
我忘記了Type.IsInstanceOf。衛生署!將編輯我的答案與一個完整的例子... –
它實際上被稱爲'IsInstanceOfType',不只是'IsInstanceOf'。 –
你打我吧;) –
剛想發佈仿製藥替代...爲什麼我不得不看到更新的答案嗎? :) –
我總是不喜歡InstanceOf的語法,爲了避免它,幾乎值得在'object'上使用這個擴展方法。 – demoncodemonkey