问题描述
我要初始化的结构数组并非简单类型,而是有自定义类型,结构如下:structUIList{CMDcmd;//自定义枚举型stringdesc;ControlcheckBox;Controllabel;}
数组:UIList[]m_pList={{CMD.XXX,"XXX",checkBox_XXX,label_XXX},{CMD.YYY,"YYY",checkBox_YYY,label_YYY},}
1.这样写编译不过2.改成下面的还是编译不过UIList[]m_pList=newUIList[]{{CMD.XXX,"XXX",checkBox_XXX,label_XXX},{CMD.YYY,"YYY",checkBox_YYY,label_YYY},}
3.我这种记录有1000条的话,一定要有简洁高效的写法才行,像C++是可以很清晰的写在一起的,形成一张表不知道c#怎么写?
解决方案
本帖最后由 sunbinjin 于 2014-11-18 23:26:06 编辑
解决方案二:
你先写一个~~~会有提示按提示改编译过了再复制多个
解决方案三:
UIList[]m_pList={newUIList{cmd=xxx,desc=xxx},...}注意要定义成public的。
解决方案四:
该回复于2014-11-19 00:10:35被版主删除
解决方案五:
1.首先,你应该好好看看书,看看老外的书。你的问题是,array数组类型,在声明及定义时,必须指定个数如1000,如下:UIList[]myArray=newUIList[1000];MessageBox.Show("Creatarraydone!");当然你可以只声明但不初始化。2.其次,想简洁高效,就用泛型,可随意添加,通过方法Add()或AddRange();而且,你这什么代码,结构体成员全都是默认私有的,你又没属性又没方法,又没构造函数,你搞个毛线。所有数组成员必须初始化再使用。publicclassUIList{publicCMDcmd;publicstringdesc;publicControlcheckBox;publicControllabel;publicUIList(){cmd=CMD.white;desc="abcd";}}privatevoidbutton1_Click(objectsender,EventArgse){List<UIList>myList=newList<UIList>();myList.Add(newUIList());UIList[]myArray=newUIList[3]{newUIList(),newUIList(),newUIList()};myList.AddRange(myArray);if(myList[0].desc=="abcd"&&myList[0].cmd==CMD.white)MessageBox.Show("SeeConstructormethod");varlinqResult=fromninmyListwheren.desc=="abcd"selectn;UIList[]resultArray=linqResult.ToArray();MessageBox.Show("Resultcountis"+resultArray.Length.ToString());}
解决方案六:
最简单的写法应该是加构造函数,然后你就可以new1000次,如果你的1000个是写在代码里,只好{newxxx,newxxx,....1000次}如果是从其他数组复制的,可以用linq的Select或new一个Array[1000]挨个生成。这种事先知道数据条数的不适合用泛型List
解决方案七:
给你写个例子publicstructMyUI{stringA;stringB;intC;publicMyUI(stringa,stringb,intc){A=a;B=b;C=c;}}publicclassMyList:IEnumerable<MyUI>{privateList<MyUI>lst=newList<MyUI>();publicvoidAdd(stringa,stringb,intc){lst.Add(newMyUI(a,b,c));}publicIEnumerator<MyUI>GetEnumerator(){returnlst.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){returnlst.GetEnumerator();}}
这里,关键是要实现IEnumerable,同时有一个Add方法用于匹配{....}表达式。最终可以这样调用其实例化和Add方法MyListm_pList=newMyList{{"asd","234",2},{"k2j","298",3}};
解决方案八:
这个可枚举对象的实例化方法,实际上是c#的语法糖。它帮你简写实例化和Add方法,写成类似数组实例化的简单语法形式。
解决方案:
如果你实例化成这样类型的可枚举对象varm_pList=newList<MyUI>{{"asd","234",2},{"asd","234",2}};
编译时由于找不到有3个参数的Add方法,c#编译器会报错。而只要能够找得到3个参数的Add方法,编译就通过了。