C#如何声明一个带自定义构造函数的结构数组

来源:百度知道 编辑:UC知道 时间:2024/05/13 12:16:17
一个结构体带自定义的构造函数进行初始话变量 我现在要声明一个这样的结构体数组

STmpRM[] s_TmpRM = new STmpRM[10](m_ii ,m_uu,m_pq);//错误的
STmpRM[] s_TmpRM = new STmpRM(m_ii ,m_uu,m_pq)[10];//错误的
1楼方法没有问题 那么如果我要声明100个,或者1000个数组成员呢 有没有更加好的方法

中肯的说一下,但从声明语法来看是实现不了这样的功能的。因为声明和赋初始值被CLR分开处理了,也就是说int[] ints=new int[]{1,2,3};这样的语句其实也都是在编译时拆分了处理的。

从这点上说,你一定要实现上述的功能,最普遍的做法都是
STmpRM[] s_TmpRM=new STmpRM[1000];
然后依次进行初始化,看个人喜好用不同的方法。最普通的无非也就是
for(...)了

当然,C#这么灵活,我们在赋值的部分上还是可以玩出很多花样的,往下看。

首先我可以给你一个最接近的实现方式,从代码角度说嘛,声明部分和赋初始值在同一行,勉强算“带初始值的声明”了:

ArrayList ary = ArrayList.Repeat(new STmpRM(m_ii,m_uu,m_pq),capacity);
其中capacity是容量大小。

或许你一定要用数组? 那就这样写,一句搞定,当然看起来有点乱:

STmpRM[] s_TmpRM = (STmpRM[])(ArrayList.Repeat(new STmpRM(m_ii,m_uu,m_pq), capacity).ToArray(typeof(STmpRM)));

我们仔细来看,首先由Repeat得到一个容量为capacity,每个元素都是以(m_ii,m_uu,m_pq)初始化的STmpRM对象,然后使用ToArray的其中一个重载方法:ToArray(Type type),之后就得到了一个object[]。最后强制装换成STmpRM[],OK,可以使用了。

最后提一下,刻意的追求一些从常规途径很难实现的东西不见得就是好事,视我们的需要而定,可以走其他路线解决。万万不要钻牛角尖。
比如你的问题,如果你的每个语句都像我那样写,别人看了肯定会不舒服的。
最简单,也最实用的,永远都是:

STmpRM[] s_TmpRM = new STmpRM[10];
for (int i = 0; i < 10; s_TmpRM[i]