日期:2014-05-18  浏览次数:21349 次

如何修改数组中结构体的值
现在定义了一个结构体TRtuAnalog
    public   struct   TRtuAnalog
                {
                        public   string   SName;
                        public   Single   fUpLimit;   //上限值
                        public   Single   fDownLimit;   //下限值
                }
                public   static   TRtuAnalog   tRtuAnalog;

同时定义一个ArrayList   数组
  public   static   ArrayList[]   aRealTime  
                {
                        get
                        {
                                if   aRealTime   ==   null)
                                        aRealTime   =   new   ArrayList[255];
                                return   aRealTime  
                        }
                        set
                        {
                                if   (value   ==   null)
                                        throw   new   aRealTime   ( "value ");
                                aRealTime   =   value;
                        }
                }

然后给tRtuAnalog   赋值  
TRtuAnalog.SName= "aaa ";
TRtuAnalog.fUpLimit=1;
TRtuAnalog.fDownLimit=2;
最后将TRtuAnalog添加到aRealTime   中
aRealTime[iIndex].Add(tRtuAnalog);

请问我如何修改aRealTime中某一行中的SName值为tRtuAnalog.SName= "bbbb "   。
我写下面的语句后
((TRtuAnalog)aRealTime[iIndex][index]).SName= "bbbb "   ;
提示我“无法修改取消装箱转换的结果”.

------解决方案--------------------
因为结构是值传递,非引用,
((TRtuAnalog)aRealTime[iIndex][index]) 是形成一个临时变量,而非aRealTime内部结构的本身,所以你修改这个临时变量是没有用的,因此出错

反射
or
利用接口

------解决方案--------------------
对数据里的结构体值,应该用一个新的结构体设置好值后再给到数据,而不是直接修改数组里的结构体。
------解决方案--------------------
interface yourinterface
{
string Name{
get;
set;
}
.....
}
public struct TRtuAnalog:yourinterface
{
string SName;
Single fUpLimit; //上限值