2012-01-05 14 views
0

私はこのC#コードを持っています。クラスの汎用インターフェース名をリストアップ

case "Cafe": 
    source.trendItem = new TrendingLocation<ITrendingCafe>(); 
    break; 
case "Pub": 
    source.trendItem = new TrendingLocation<ITrendingPub>(); 
    break; 
etc 

a trendItemはこのように定義されます。

public class TrendingItem<T> where T : ITrendingItem 
{ 
    public T trendItem { get; set; } 
} 

次に、私はこれを持っています。

public List<TrendingItem<ITrendingItem>> trendItems { get; set; } 

上記のtrendItemsの各項目について、私はインターフェイスを取得したいと考えています。

私は使ってみました。

string g = fvm.trendItems[4].trendItem.GetType().GetInterfaces()[1].Name; 

string g = typeof(TrendingLocation<>).GetInterfaces()[0].Name; 

が、そのようなITrendingCafeとして、これらのリストジェネリックインターフェイスのどちらも、ITrendingRestaurantなど

私は、一般的なインタフェース名の名前を取得することができます方法はありますか?

+0

特殊ジェネリックインターフェイスを探しているのですか、それぞれのジェネリックインターフェイスを特殊化するために使用するタイプをお探しですか? –

+0

私はリストを必要とするので、Webページ上のクラスタグにその名前を置くことができます。これは、スタイリングのための対応するCSSクラスを持ちます – griegs

答えて

1

タイプのGetGenericArgumentsメソッドを使用します。

私はあなたの構造を理解していれば、それは何かのようになります:

Type[] typeArguments = fvm.trendItems[4].trendItem.GetType().GetGenericArguments(); 

foreach (Type tParam in typeArguments) 
{ 
    // Compare the type with the interface you are looking for. 
} 
0

私はITrendingCafeITrendingItemを実装インターフェイスであることそれを取ります。ここ

using System; 
using System.Collections.Generic; 

namespace TestConsoleApplication 
{ 
    public interface ITrendingItem 
    { 
     string ItemName { get; set; } 
    } 

    public interface ITrendingCafe : ITrendingItem 
    { 
     string CafeName { get; set; } 
    } 


    public class TrendingItem<T> where T : ITrendingItem 
    { 
     public T trendItem { get; set; } 
    } 

    public class Cafe : ITrendingCafe 
    { 
     public string ItemName { get; set; } 
     public string CafeName { get; set; } 
    } 


    class Program 
    { 
     static void Main(string[] args) 
     { 
      var test = new List<TrendingItem<ITrendingItem>> { new TrendingItem<ITrendingItem> { trendItem = new Cafe() } }; 

      foreach (var trendingItem in test[0].trendItem.GetType().GetInterfaces()) 
      { 
       Console.Out.WriteLine(trendingItem.Name); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 

されて出力される:

enter image description here

あなたが見ることができるように、インタフェースがある私がかかり、Tを実装がすべてのインタフェースを表示する迅速なプログラムを書きました。ループして、必要なものを見つけてください!

関連する問題