2012-01-05 44 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

你在尋找專門的通用接口還是在尋找用於專門化每個通用接口的類型? – 2012-01-05 03:17:00

+0

我想要一個列表,以便我可以將它的名稱放在Web頁面上的類標記中,然後它將具有用於樣式的相應css類 – griegs 2012-01-05 03:21:37

回答

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

我認爲ITrendingCafe是實現ITrendingItem的接口。我寫了一個快速程序,它並顯示所有T實現接口:

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

正如你所看到的界面是存在的。只需循環,找到你需要的一個!

相關問題