如何在运行时确定变量类型

时间:2015-05-27 08:54:36

标签: c# generics

我有不同类型的列表。类具有公共基类和通用接口:

 public List<IColumn> columnTypes = new List<IColumn>
        {        
        new Column1(),
        new Column2(),
        new Column3()
        };

现在我需要一个变量c:

c = columnTypes[x];

其中x是在运行时确定的,因此c将在运行时确定其类型。 我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

您有一个界面(IColumn)...您应该使用该界面中的Column*

IColumn c = columnTypes[x];

c.Foo(); // where Foo is a method defined in IColumn and implemented in Column*

如果您愿意,可以:

Column1 c1 = c as Column1;

if (c1 != null)
{
    c1.SpecificFooC1(); // "special" method of Column1
}

if (c1 is Column1)
{
    // Here we were only interested in knowing if c1 was Column1
}

答案 1 :(得分:1)

为什么不使用接口类型的变量

   IColumn  c  = columnTypes[x];

如果您的类型没有完全实现接口IColumn
您可以使用columnTypes[x].GetType(),但这需要一些额外的编码

答案 2 :(得分:0)

var c = columnTypes[x];

c.GetType()会为您提供Type对象,其中包含您需要的所有信息:here是一个概述。