使用GetType()检查其类型后,将Generic Type转换为引用类型。怎么样?

时间:2010-06-16 09:23:48

标签: c# generics type-conversion casting

我正在尝试调用类RFIDeas_Wrapper中定义的函数(正在使用dll)。 但当我检查读者的类型,然后我用它来调用函数它显示错误Cannot convert type T to RFIDeas_Wrapper.

修改

private List<string> GetTagCollection<T>(T Reader)
            {
                TagCollection = new List<string>();
                if (Reader.GetType() == typeof(RFIDeas_Wrapper))
                {

                    ((RFIDeas_Wrapper)Reader).OpenDevice(); 
                    // here Reader  is of type RFIDeas_Wrapper
                    //, but i m not able to convert Reader into its datatype.

                    string Tag_Id =  ((RFIDeas_Wrapper)Reader).TagID();
                    //Adds Valid Tag Ids into the collection
                    if(Tag_Id!="0")
                        TagCollection.Add(Tag_Id);
                }
                else if (Reader.GetType() == typeof(AlienReader))
                    TagCollection = ((AlienReader)Reader).TagCollection;

                return TagCollection;
            }
  

((RFIDeas_Wrapper)阅读器).OpenDevice();

     

((AlienReader)阅读器).TagCollection;

我希望这行能够毫无问题地执行。因为Reader总是属于我指定的类型。 如何让编译器理解同样的事情。

1 个答案:

答案 0 :(得分:3)

一个技巧是在中间使用object强制它:

if (Reader is RFIDeas_Wrapper)
{
    ((RFIDeas_Wrapper)(object)Reader).OpenDevice(); 
    ...
}

或使用as

RFIDeas_Wrapper wrapper = Reader as RFIDeas_Wrapper;
if (wrapper != null)
{
    wrapper.OpenDevice();
    ...
}