首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么修改数组中结构体的值

2012-02-06 
如何修改数组中结构体的值现在定义了一个结构体TRtuAnalogpublicstructTRtuAnalog{publicstringSNamepubl

如何修改数组中结构体的值
现在定义了一个结构体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; //上限值


Single fDownLimit; //下限值
public Name{
get{
...
}
set{
SName = value;
}
}
}
yourinterface yi =aRealTime[iIndex] as yourinterface;
yi.Name = "xxxx "
[解决办法]
我怎么觉得应该是如下的方式呢?因为结构体是值类型,不能通过引用修改吧...


TRtuAnalog tmp = (TRtuAnalog)aRealTime[iIndex][index];
tmp.SName= "bbbb " ;

aRealTime[iIndex][index]=tmp;

热点排行