列出类通用接口名称

时间:2012-01-05 03:10:34

标签: c# interface

我有这个c#代码;

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

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等。

有没有办法可以获得通用接口名称的名称?

2 个答案:

答案 0 :(得分:1)

您想使用Type的GetGenericArguments方法。

如果我理解你的结构,它将是:

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

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

答案 1 :(得分:0)

我认为ITrendingCafe是一个实现ITrendingItem的接口。我写了一个快速程序,它接受并显示T Implements:

的所有接口
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

如您所见,界面就在那里。只需循环找到你需要的那个!