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" ;
提示我“无法修改取消装箱转换的结果”.
10 个解决方案
#1
因为结构是值传递,非引用,
((TRtuAnalog)aRealTime[iIndex][index]) 是形成一个临时变量,而非aRealTime内部结构的本身,所以你修改这个临时变量是没有用的,因此出错
反射
or
利用接口
((TRtuAnalog)aRealTime[iIndex][index]) 是形成一个临时变量,而非aRealTime内部结构的本身,所以你修改这个临时变量是没有用的,因此出错
反射
or
利用接口
#2
难道我没看懂?
((TRtuAnalog)(aRealTime[iIndex])).SName = "bbb";//不是这样的?
((TRtuAnalog)(aRealTime[iIndex])).SName = "bbb";//不是这样的?
#3
具体的该怎么做?我现在是不会了:(
#4
jiatong1981(末日之痕) , 不是这样的。至少我这边这样写报错!hdt(倦怠)说得有道理,但我就是不会做
#5
对数据里的结构体值,应该用一个新的结构体设置好值后再给到数据,而不是直接修改数组里的结构体。
#6
关注
#7
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"
{
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"
#8
我怎么觉得应该是如下的方式呢?因为结构体是值类型,不能通过引用修改吧...
TRtuAnalog tmp = (TRtuAnalog)aRealTime[iIndex][index];
tmp.SName="bbbb" ;
aRealTime[iIndex][index]=tmp;
TRtuAnalog tmp = (TRtuAnalog)aRealTime[iIndex][index];
tmp.SName="bbbb" ;
aRealTime[iIndex][index]=tmp;
#9
ls方法也可以但有一个小问题
如果结构的成员比较到,需要重复输入,比较麻烦
如果结构的成员比较到,需要重复输入,比较麻烦
#10
sorry 上面错了
#1
因为结构是值传递,非引用,
((TRtuAnalog)aRealTime[iIndex][index]) 是形成一个临时变量,而非aRealTime内部结构的本身,所以你修改这个临时变量是没有用的,因此出错
反射
or
利用接口
((TRtuAnalog)aRealTime[iIndex][index]) 是形成一个临时变量,而非aRealTime内部结构的本身,所以你修改这个临时变量是没有用的,因此出错
反射
or
利用接口
#2
难道我没看懂?
((TRtuAnalog)(aRealTime[iIndex])).SName = "bbb";//不是这样的?
((TRtuAnalog)(aRealTime[iIndex])).SName = "bbb";//不是这样的?
#3
具体的该怎么做?我现在是不会了:(
#4
jiatong1981(末日之痕) , 不是这样的。至少我这边这样写报错!hdt(倦怠)说得有道理,但我就是不会做
#5
对数据里的结构体值,应该用一个新的结构体设置好值后再给到数据,而不是直接修改数组里的结构体。
#6
关注
#7
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"
{
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"
#8
我怎么觉得应该是如下的方式呢?因为结构体是值类型,不能通过引用修改吧...
TRtuAnalog tmp = (TRtuAnalog)aRealTime[iIndex][index];
tmp.SName="bbbb" ;
aRealTime[iIndex][index]=tmp;
TRtuAnalog tmp = (TRtuAnalog)aRealTime[iIndex][index];
tmp.SName="bbbb" ;
aRealTime[iIndex][index]=tmp;
#9
ls方法也可以但有一个小问题
如果结构的成员比较到,需要重复输入,比较麻烦
如果结构的成员比较到,需要重复输入,比较麻烦
#10
sorry 上面错了