在c#中获取底层接口的属性

时间:2014-11-22 00:18:11

标签: c# reflection interface

在阅读了与这个问题的标题相关的所有文章之后,我发现了一些很接近的文章,但没有一篇文章能够完美地完成我想要完成的任务。

我知道如何使用反射来获取KNOWN接口类型的属性。我不知道的是如何获取我不知道并且直到运行时才知道的接口类型的属性。这就是我现在正在做的事情:

SqlParameterCollection parameters = Command.Parameters;

thing.GetType().GetInterfaces().SelectMany(i => i.GetProperties());
foreach (PropertyInfo pi in typeof(IThing).GetProperties()
   .Where(p => p.GetCustomAttributes(typeof(IsSomAttribute), false).Length > 0))
{
    SqlParameter parameter = new SqlParameter(pi.Name, pi.GetValue(thing));
    parameters.Add(parameter);               
}

... 但是,这假设我已经知道并期待一个类型" IThing"的接口。如果我在运行时之前不知道类型怎么办?

1 个答案:

答案 0 :(得分:2)

您不知道需要事先知道类型。您可以在不指定类型的情况下迭代属性:

 static void Main(string[] args)
        {
            ClassA a = new ClassA();
            IterateInterfaceProperties(a.GetType());
            Console.ReadLine();
        }

    private static void IterateInterfaceProperties(Type type)
    {
        foreach (var face in type.GetInterfaces())
        {
            foreach (PropertyInfo prop in face.GetProperties())
            {
                Console.WriteLine("{0}:: {1} [{2}]", face.Name, prop.Name, prop.PropertyType);
            }
        }
    }