VC常用数据类型列表
- 格式:doc
- 大小:104.00 KB
- 文档页数:2
VC++中BYTE类型byte是0~255直接的一个数字。
一般都是用byte数组。
byte 类型是一个字节的数据,这个类型有以下几个应用场合:1、最常用的一个场景,就是处理二进制数据流,比如说从某个文件读取一段,我们在读取的时候并不关心这个文件到底是什么格式,只需要关心我需要从哪里开始的多长的一段。
然后我们可以一个字节一个字节去分析这个文件的某部分。
或者我们用来获取网络上传递的信息,或者用来承载串行口传过来的数据等等。
2、最简单的一个场景,就是处理一个字节的数据。
对于来说,一个Char的长度不是一个字节,也不是两个字节,而仅仅是用来表示一个字符得很抽象的类——其实是两个字节,我这么说有我的理由的:比如说字符'A ',如果我们用AscII方式去理解,或者说转换成用AscII编码储存的二进制数据,那就是一个字节;如果用Unicode方式,那么就是两个字节。
也就是说现在不能像VB6那样,用Char来存储一个字节的数据(首先某些二进制值是非法字符,存不进去,其次就算存进去了,也很可能会浪费50%的空间,就算做得很好也不太可能有100%的利用率),你也不要企望一个Char他就一定是代表一个字节的内容。
所以现在我们用Byte来处理一个字节大小的数据。
3、如果你有很多很多的标志位,就是那种只要表示“是或否”的数据,如果你用Boolean就非常不合算,因为Boolean占用4个字节,而Byte只占用一个。
比如你有1百万个这样的标志,那么用Boolean要花费4MB,而用Byte只要1MB。
当然,为建议你最好不要用Byte 来作为标志使用,原因你自己慢慢体会。
现在的内存够大,没必要为了省这么3MB的空间而作出另外一些牺牲。
标题:深度解析C语言数据类型缩写及含义在计算机编程的世界中,数据类型是非常重要的概念。
在C语言中,数据类型的缩写及含义更是程序员们必须熟练掌握的知识点之一。
本文将深度解析C语言中常见的数据类型缩写及其含义,帮助读者更深入地理解这一重要主题。
1. 数据类型的概念在C语言中,数据类型用来声明变量的类型,指定变量可以存储的数据类型及所占用的内存大小。
C语言中的数据类型包括基本数据类型和派生数据类型。
基本数据类型包括整型、浮点型、字符型和空类型,而派生数据类型包括数组、指针、结构体和共用体等。
2. 基本数据类型2.1 int:整型在C语言中,int代表整型数据类型,通常用于声明整数变量。
int类型在不同的系统中所占用的内存大小可能会有所不同,但通常情况下,int类型占用4个字节的内存空间。
2.2 float:单精度浮点型float代表单精度浮点型数据类型,用于声明具有小数部分的变量。
float类型通常占用4个字节的内存空间,用于存储小数,精度约为6位有效数字。
2.3 double:双精度浮点型double代表双精度浮点型数据类型,用于声明双精度小数变量。
double类型通常占用8个字节的内存空间,精度约为15位有效数字。
2.4 char:字符类型char代表字符数据类型,用于存储单个字符的变量。
char类型通常占用1个字节的内存空间。
2.5 void:空类型void代表空类型,用于表示没有类型。
通常用于函数的返回值或指针的类型。
以上是C语言中常见的基本数据类型的缩写及含义。
掌握这些基本数据类型对于程序员来说非常重要,它们是构建任何C语言程序的基础。
3. 派生数据类型3.1 数组:一组相同数据类型的集合数组是C语言中一组相同数据类型的集合,可以存储固定大小的元素。
3.2 指针:存储变量位置区域的变量指针是C语言中非常重要的概念,它用来存储变量的内存位置区域。
指针可以指向任何数据类型的变量,它可以极大地提高程序的灵活性和效率。
VC虚级联、GFP和LCAS简介在SDH网络上传送以太网业务主要涉及到3个新标准:VC虚级联(VC Virtual concatenation)、通用封装过程GFP(Generic framing procedure)和连接容量调整安排LCAS (Link capacity adjustment scheme)。
VC虚级联用于在SDH上配置带宽灵活的容器承载各种新业务,LCAS用于在VC虚级联时提供带宽的无损动态调整以及在参与虚级联的部分VC 失效时提供保护,GFP则是目前最流行的SDH网络和光传送网络上的链路层封装协议。
VC 虚级联的技术细节在新版ITU_T G.707上(G.707/Y.1322 10/2000)描述,GFP的技术细节在ITU_T G.7041/Y.1303(12/2001)上描述,LCAS的技术细节在G.7042/Y.1305(11/2001)上描述。
VC虚级联:VC虚级联的基本思想是将多个VC级联起来实现一个带宽可灵活设置的容器(VCG)用于承载新业务,在源端将业务分散到各个参加级联的VC中,参加级联的多个VC在网络中独立传输,在宿端再通过时延补偿将各个VC承载的业务汇合成完整的业务流。
与VC实级联相比,因VC虚级联只需要对源端和宿端的设备进行升级,而不需要改动传输路径经过的中间设备,能很方便地在现有SDH网络上实现各种新业务的传送,所以该技术对在SDH 网络上传送各种新的宽带业务非常重要。
ITU-T G.707定义了2种VC虚级联:高阶VC虚级联,即VC-3/4虚级联(VC-3/4-Xv)和低阶VC虚级联,即VC-2/1虚级联(VC-2-Xv/ VC-12-Xv/VC-11-Xv)。
因同一VCG的不同VC在中间传输过程中单独传输,到宿端时不同的VC引入的时延不同,需要在宿端进行时延差补偿。
为在宿端能补偿较长的时延差,对VCG中每个VC新加一个专门的开销MFI(复帧指示)。
VC常用数据类型总结VC(Visual C++)常用数据类型指的是在C++编程中经常使用的数据类型。
根据数据类型的特性和用途不同,VC常用数据类型可以分为以下几类:1. 基本数据类型(Primitive Data Types):- 整型(Integer Type):用于表示整数,包括有符号整数(signed)和无符号整数(unsigned),例如int、short、long、char等。
- 浮点型(Floating-Point Type):用于表示带小数点的数值,包括单精度浮点型(float)和双精度浮点型(double)。
- 字符型(Character Type):用于表示单个字符,例如char类型。
- 布尔型(Boolean Type):用于表示真(true)或假(false),例如bool类型。
2. 高级数据类型(Advanced Data Types):- 数组(Array):用于存储多个相同类型的元素,例如int数组、char数组等。
- 结构体(Structure):用于封装多个不同类型的变量,例如定义一个包含姓名、年龄等信息的Student结构体。
- 枚举(Enumeration):用于定义一组相关的常量,例如定义星期几的枚举类型。
3. 指针(Pointer):- 指针(Pointer):保存变量的内存地址,可以通过指针间接访问变量的值,例如int*指针。
- 空指针(Null Pointer):指向无效内存地址的指针,通常表示指针未初始化或指向不存在的对象。
- 空指针常量(Null Pointer Constant):表示空指针的特殊值,通常用NULL或nullptr表示。
4. 自定义数据类型(User-Defined Data Types):- 类(Class):用于创建自定义的数据类型,包含数据成员和成员函数。
- 模板(Template):用于创建通用的数据类型,支持不特定的数据类型参数,例如STL容器类(vector、list等)的模板类型。
大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX 函数,这个问题曾经搞的很混乱。
为了统一,有必要把来龙去脉搞清楚。
为了搞清这些函数,就必须理请几种字符类型的写法。
char就不用说了,先说一些wchar_t。
wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里:typedef unsigned short wchar_t;不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必须使用wcs前缀的函数,例如wcscpy。
为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如:wchar_t *szTest=L"This is a Unicode string.";下面在看看TCHAR。
如果你希望同时为ANSI和Unicode编译的源代码,那就要include TChar.h。
TCHAR是定义在其中的一个宏,它视你是否定义了_UNICODE宏而定义成char 或者wchar_t。
如果你使用了TCHAR,那么就不应该使用ANSI的strXXX函数或者Unicode 的wcsXXX函数了,而必须使用TChar.h中定义的_tcsXXX函数。
另外,为了解决刚才提到带“L”的问题,TChar.h中定义了一个宏:“_TEXT”。
以strcpy函数为例子,总结一下:.如果你想使用ANSI字符串,那么请使用这一套写法:char szString[100];strcpy(szString,"test");.如果你想使用Unicode字符串,那么请使用这一套:wchar_t szString[100];wcscpyszString,L"test");.如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:TCHAR szString[100];_tcscpy(szString,_TEXT("test"));2.字符串及处理之三: 使用TCHAR系列方案使用TCHAR系列方案编写程序TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码。
VC++中BYTE类型byte是0~255直接的一个数字。
一般都是用byte数组。
byte 类型是一个字节的数据,这个类型有以下几个应用场合:1、最常用的一个场景,就是处理二进制数据流,比如说从某个文件读取一段,我们在读取的时候并不关心这个文件到底是什么格式,只需要关心我需要从哪里开始的多长的一段。
然后我们可以一个字节一个字节去分析这个文件的某部分。
或者我们用来获取网络上传递的信息,或者用来承载串行口传过来的数据等等。
2、最简单的一个场景,就是处理一个字节的数据。
对于来说,一个Char的长度不是一个字节,也不是两个字节,而仅仅是用来表示一个字符得很抽象的类——其实是两个字节,我这么说有我的理由的:比如说字符'A ',如果我们用AscII方式去理解,或者说转换成用AscII编码储存的二进制数据,那就是一个字节;如果用Unicode方式,那么就是两个字节。
也就是说现在不能像VB6那样,用Char来存储一个字节的数据(首先某些二进制值是非法字符,存不进去,其次就算存进去了,也很可能会浪费50%的空间,就算做得很好也不太可能有100%的利用率),你也不要企望一个Char他就一定是代表一个字节的内容。
所以现在我们用Byte来处理一个字节大小的数据。
3、如果你有很多很多的标志位,就是那种只要表示“是或否”的数据,如果你用Boolean就非常不合算,因为Boolean占用4个字节,而Byte只占用一个。
比如你有1百万个这样的标志,那么用Boolean要花费4MB,而用Byte只要1MB。
当然,为建议你最好不要用Byte 来作为标志使用,原因你自己慢慢体会。
现在的内存够大,没必要为了省这么3MB的空间而作出另外一些牺牲。
VC++ 列表控件(CList) 使用方法(2)列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用BOOL Create( DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nI D );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);通过调用intInsertItem( intnItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用intInsertColumn( intnCol, LPCTSTR lpszColumnHeading, intnFormat , intnWidth, i ntnSubItem);可以插入列。
vc数据类型转换大全(转载)int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]=”程佩君”;char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long)ltoa(l,temp,10);浮点数(float,double)用fcvt可以完成转换,这是MSDN中的例子:int decimal, sign;char *buffer;double source = 3.1415926535;buffer = _fcvt( source, 7, &decimal, &sign );运行结果:source: 3.1415926535 buffer: ‘31415927′ decimal: 1 sign: 0decimal表示小数点的位置,sign表示符号:0为正数,1为负数CString变量str = “2008北京奥运”;buf = (LPSTR)(LPCTSTR)str; //这个因为buf是个char*变量先把CString 变量转换为const char*类型的再变为char*类型的上面的CString转换为char*型号的必须经过两次反之的直接赋值就可以BSTR变量BSTR bstrValue = ::SysAllocStri ng(L”程序员”);char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue);一定注意凡是定义的指针变量一定要用delete显示删除AfxMessageBox(buf);delete(buf);CComBSTR变量CComBSTR bstrVar(”test”);char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf);delete(buf);_bstr_t变量_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用_bstr_t bstrVar(”test”);const char *buf = bstrVar;///不要修改buf中的内容_bstr_t实际上是个字符指针型的AfxMessageBox(buf);通用方法(针对非COM数据类型)用sprintf完成转换char buffer[200];char c = ‘1′;int i = 35;long j = 1000;float f = 1.7320534f;sprintf( buffer, “%c”,c);sprintf( buffer, “%d”,i);sprintf( buffer, “%d”,j);sprintf( buffer, “%f”,f);二、字符串转换为其它数据类型strcpy(temp,”123″);短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);CString变量CString name = temp;BSTR变量BSTR bstrValue = ::SysAllocString(L”程序员”);…///完成对bstrValue的使用SysFreeString(bstrValue);CComBSTR变量CComBSTR类型变量可以直接赋值CComBSTR bstrVar1(”test”);CComBSTR bstrVar2(temp);_bstr_t变量_bstr_t类型的变量可以直接赋值_bstr_t bstrVar1(”test”);_bstr_t bstrVar2(temp);三、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format(”%d”,i);浮点数(float)str.Format(”%f”,i);字符串指针(char*)等已经被CString构造函数支持的数据类型可以直接赋值str = username;对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char*的方法先转到char *,然后赋值给CString变量。
VC++常用数据类型在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。
之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。
那么什么是BSTR、LPSTR以及LPWSTR呢?BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。
它被描述成一个与自动化相兼容的类型。
由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。
图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。
LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。
LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI 字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。
在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等,它们的含义如图2所示。
例如,LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为char*。
一般地,还有下列类型定义:#ifdef UNICODEtypedef LPWSTR LPTSTR;typedef LPCWSTR LPCTSTR;#elsetypedef LPSTR LPTSTR;typedef LPCSTR LPCTSTR;#endif二、CString、CStringA 和CStringWVisual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类,它有CString、CStringA和CStringW三种形式,分别操作不同字符类型的字符串。
VC中CList用法及其成员的使用初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。
以下,就个人经历而言,告诉大家如何使用CList。
CList是一个双向链表类。
1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。
2、理解CList的声明和构造方法CList的声明如下:template< class TYPE, class ARG_TYPE >class CList : public CObject由此,我们知道CList是一个模版类,那么他的两个class是什么意思呢?下面看一个例子:CList<CString ,CString&> list;//链表对象1CList<CString,CString> list2;//链表对象2这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型引用,当然也可以是对象,而不是引用。
对象和引用的区别,可以看一下C++基础知识方面的书。
/////////////////////////////////////////////////////////////////////////////// MSDN:使用时要#include <afxtempl.h>ConstructionCList Constructs an empty ordered list.建立一个链表example:CList<int,int> myList;//建立一个int链表CList<CString,CString&> myList(16);//建立一个cstring的链表,后面的16表示链表里面数据的个数,如果不写的话,可能是不限个数?CList<MYTYPE,MYTYPE&> myList;//建立一个MYTYPE类型(自定义)的链表如果不存入数据的话,刚建立的链表是空的,头尾都为空Head/Tail AccessGetHead Returns the head element of the list (cannot be empty).返回链表的头数据例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.GetHead();//tmp被赋予了0GetTail Returns the tail element of the list (cannot be empty).返回链表的尾数据CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.GetTail();//tmp被赋予了9999OperationsRemoveHead Removes the element from the head of the list.移除链表头数据,链表数据个数减1,返回缩减前的头数据例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.RemoveHead();//tmp被赋予了之前的头数据:0;同时数据个数变为9999;RemoveTail Removes the element from the tail of the list.移除链表尾数据,链表数据个数减1,返回缩减前的尾数据例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.RemoveTail();//tmp被赋予了之前的尾数据:9999;同时数据个数变为9999;AddHead Adds an element (or all the elements in another list) to the head of the list (makes a new head).在链表头处插入新数据,链表数据个数加1,返回新的链表头位置(POSITION); 例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.AddHead(int(314));//链表有了一个新的头数据:314;同时链表个数变为10001;pos为新的头的位置;AddTail Adds an element (or all the elements in another list) to the tail of the list (makes a new tail).在链表尾处插入新数据,链表数据个数加1,返回新的链表尾位置(POSITION); 例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.AddTail(int(314));//链表有了一个新的尾数据:314;同时链表个数变为10001;pos为新的尾的位置;RemoveAll Removes all the elements from this list.清空链表,其头尾皆变成空指针;IterationGetHeadPosition Returns the position of the head element of the list.返回链表头的位置;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得链表头的位置GetTailPosition Returns the position of the tail element of the list.返回链表尾的位置;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置GetNext Gets the next element for iterating.返回当前位置的数据,之后,位置后移一位;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得链表头的位置int tmp=myList.GetNext(pos);//tmp被赋予了头数据的值:0;同时pos指向第二个数据1;GetPrev Gets the previous element for iterating.返回当前位置的数据,之后,位置前移一位;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置int tmp=myList.GetNext(pos);//tmp被赋予了尾巴数据的值:9999;同时pos指向倒数第二个数据9998;Retrieval/ModificationGetAt Gets the element at a given position.返回指定位置的数据;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置,还可以继续改变pos,以指向其他数据int tmp=myList.GetAt(pos);//tmp被赋予链表尾的数据SetAt Sets the element at a given position.CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置,还可以继续改变pos,以指向其他数据myList.SetAt(pos,int(222));//将链表尾部的数据赋成222RemoveAt Removes an element from this list, specified by position.清除指定位置处的数据;同时数据个数减1;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置myList.RemoveAt(pos);//链表pos(尾部)位置的数据被清除,数据个数变为9999;InsertionInsertBefore Inserts a new element before a given position.在指定位置前插入一个新数据,数据个数加1;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得第一个数据的位置myList.InsertBefore(pos,int(123));//在第一个数据前插入一个新数据:123,同时数据个数变为10001InsertAfter Inserts a new element after a given position.在指定位置后插入一个新数据,数据个数加1;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得第一个数据的位置myList.InsertAfter(pos,int(123));//在第一个数据后插入一个新数据:123,同时数据个数变为10001SearchingFind Gets the position of an element specified by pointer value.返回指定数据对应的位置;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.Find(int(0));//获得0(链表头)的位置FindIndex Gets the position of an element specified by a zero-based index.返回索引号对应的位置;POSITION pos=myList.FindIndex(0);//0表示链表头,以此类推StatusGetCount Returns the number of elements in this list.返回链表的数据个数int num=myList.GetCount();//获得链表的数据个数IsEmpty Tests for the empty list condition (no elements).判定链表是否为空;返回1表示链表是空,返回0表示链表非空;BOOL empty=myList.IsEmpty();。