2013-07-24 219 views
14

我正試圖找到以下的替代方案,以便我可以利用is運算符。有沒有辦法將參數傳遞給is運算符?

public bool IsOfType(Type type) 
{ 
    return this._item.GetType() == type; 
} 

類似下面的內容,它不會編譯。

public bool IsOfType(Type type) 
{ 
    return this._item is type; 
} 

回答

28

我認爲你正在尋找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); 
} 
+2

你打我吧;) –

+1

剛想發佈仿製藥替代...爲什麼我不得不看到更新的答案嗎? :) –

+1

我總是不喜歡InstanceOf的語法,爲了避免它,幾乎值得在'object'上使用這個擴展方法。 – demoncodemonkey

12

你可以做多件事情,要看具體情況:

  • 使用Type.IsAssignableFrom(Type)如果你所得到的是兩個類型的實例。如果您有權訪問要比較的實例,請使用Type.IsInstanceOf(object instance)
  • 喜歡使用泛型:

    public bool IsOfType<T>() 
    { 
        return this._item is T; 
    } 
    
+2

我忘記了Type.IsInstanceOf。衛生署!將編輯我的答案與一個完整的例子... –

+0

它實際上被稱爲'IsInstanceOfType',不只是'IsInstanceOf'。 –

相關問題