我在TList對象中記錄了兩种類型的數据,分別為:TLabel,Timage
并用MyList.items[i]返回一個數据。為了判斷MyList.items[i]返回值的數据類型,我使用了以下語句:
var tcp: String;begin
  if (MyList.items[i] is TLabel) then tcp:=(MyList.items[i] as TLabel).caption;
end;結果編譯時出現 Operator not applicable to this operand type錯誤,請問為什么, 應該如何判斷當前MyList.items[i]返回值的數据類型是什么?

解决方案 »

  1.   

    (*//
    声明:
      本人保证所提供的方法是所知的最好方法
      解答问题纯属公益性质
      所以请不要向我追问
      如果有时间自会关注后续问题
    分析:
      is、as运算处理的是对象类型(TObject)
      TList存储的是指针类型
      对象其实就是一个实例指针
      所以把TList存储的元素强制转换成对象即可使用is,as运算
    问题:如何对指针类型进行is、as运算?
    设计:Zswang
    日期:2002-09-30
    方案:使用强制转换
    附言:必须保存TList实例存储的都是实例指针
    //*)///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyList: TList; //调试
      tcp: string;
      I: Integer; //调试
    begin
      MyList := TList.Create; //调试
      try //调试
        MyList.Add(Image1); //调试
        MyList.Add(Label1); //调试
        for I := 0 to MyList.Count - 1 do
          if (TObject(MyList[I]) is TLabel) then begin
            tcp := (TObject(MyList[I]) as TLabel).Caption;
            { TODO -oZswang -c2002.09.29 : 使用tcp }
          end;
      finally //调试
        MyList.Free; //调试
      end; //
    end;
    ///////End Demo