簡體   English   中英

在 C# 中使用帶有泛型的 `is` 運算符

[英]Using the `is` operator with Generics in C#

我想做這樣的事情:

class SomeClass<T>
{
   SomeClass()
   {
        bool IsInterface = T is ISomeInterface;
   }
}

對於這樣的事情,最好的方法是什么?

注意:我不希望用where約束T ,但我希望我的代碼知道T實現的接口類型。 我寧願我不必構造一個T

我認為您不能為此使用is運算符。 但是您可以使用 IsAssignableFrom:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

應該使用以下代替

 bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

是運算符

is運算符用於檢查對象的run-time type是否與給定的type compatible

如果滿足以下兩個條件,則使用is符合語法的表達式的計算結果為 true:

  • 表達式不為空。
  • 表達式可以強制轉換為類型。 也就是說,形式為 (type)(expression) 的強制轉換表達式將完成而不會引發異常。 有關詳細信息,請參閱7.6.6 Cast 表達式。

參考

您可以使用IsAssignableFrom

  class SomeClass<T>
  {
     SomeClass()
     {
        bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
     }
  } 
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))

我相信你能做到最好:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

你可以嘗試做類似的事情

Type Ttype = typeof(T);

這將為您提供 Type 類的全部功能,該類具有“FindInterfaces”等功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM