[英]Store reference of an ushort in an array in c#
我想将ushort
变量的引用存储在ushort array
,以便当我更改ushort数组内的值时,变量的值也会更改。 这是我的示例代码,它将清楚地说明我要实现的目标。
public void IndexSetter(List<int> indexVal,Rootobject objectVal)
{
ushort[] refereneArray = new ushort[8]
{
objectVal.index1, objectVal.index2,
objectVal.index3 , objectVal.index4,
objectVal.index5, objectVal.index6,
objectVal.index7, objectVal.index8
};
for(int j = 0; j< indexVal.Count;j++)
{
refereneArray[j] =(ushort) indexVal[j];
}
}
而不是像上面的代码那样存储值,我需要存储引用,以便indexVal
列表中的更改反映在index1,index2等值中。
您可以使用不安全的代码,使用如下指针数组来做到这一点:
static unsafe void IndexSetter(IList<ushort> indexVal, Rootobject objectVal) {
fixed (ushort* r1 = &objectVal.index1)
fixed (ushort* r2 = &objectVal.index2) {
ushort*[] refereneArray = {r1, r2};
for (int j = 0; j < indexVal.Count; j++) {
*refereneArray[j] = (ushort) indexVal[j];
}
}
}
您是否应该在实际应用中真正做到这一点是另一回事。 很有可能有更好的方法来解决问题,但是您没有告诉我们实际的问题是什么。
如果性能不是关键-您可以使用反射:
static void IndexSetter2(IList<ushort> indexVal, Rootobject objectVal) {
int i = 0;
foreach (var field in objectVal.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)
.Where(c => c.Name.StartsWith("index") && c.FieldType == typeof(ushort))
.OrderBy(c => c.Name)) {
field.SetValue(objectVal, indexVal[i]);
i++;
}
}
我建议不要使用名称完全相同的8个索引(数字除外)。 给班上的每个成员一个名称,描述其内容,但是index6
很index6
解释。
话虽如此,您可以做的是在类本身中具有一个索引数组:
class Rootobject
{
public int[] Indexes { get; set; }
}
现在,您可以按以下方式访问它们:
public void IndexSetter(List<int> indexVal, Rootobject objectVal)
{
for(int i = 0; i < indexVal.Count; i++)
objectVal.Indexes[index] = indexVal[i];
}
甚至更短:
objectVal.Indexes = indexVal.Cast<ushort>().ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.