我有类似这样的类(这是代码的子集)
public struct overlay
{
[FieldOffset(0)]
public Byte[] b;
[FieldOffset(0)]
public Int32[] i;
}
class MyClass
{
private overlay data; \\Initialised using data.b=new Byte[4096]
public Int32 site0 { set { data.i[0] = value; } get { return data.i[0]; } }
public Int32 site1 { set { data.i[1] = value; } get { return data.i[1]; } }
public String s
{
get { return System.Text.Encoding.ASCII.GetString(data.b, 8, 16).TrimEnd(' '); }
set { System.Text.Encoding.ASCII.GetBytes(value.PadRight(16)).CopyTo(data.b, 8); }
}
public Int32 site2 { set { data.i[5] = value; } get { return data.i[5]; } }
}
我目前正在访问这样的网站变量...
MyClass m=new MyClass();
m.site0=1;
m.site1=1;
m.site2=1;
我想像这样访问它们。
MyClass m=new MyClass();
for (Int32 i=0; i<m.sites.Count; ++i)
m.sites[i]=1;
有人可以建议我怎么做吗?
答案 0 :(得分:3)
您无法在班级中为字段创建索引器。你必须创建自己的类来存储数据,然后你可以创建它的类型字段。
class MyClass
{
public MyIndexerClass Sites;
public class MyIndexerClass
{
private byte[] data;
public MyIndexerClass()
{
this.data = new byte[0];
}
public MyIndexerClass(byte[] Data)
{
this.data = Data;
}
public byte this[int index]
{
get
{
return data[index];
}
set
{
data[index] = value;
}
}
}
public MyClass()
{
this.Sites = new MyIndexerClass();
}
public MyClass(byte[] data)
{
this.Sites = new MyIndexerClass(data);
}
}
如果您想在Count
上使用foreach
属性和MyIndexerClass
,则应实施IEnumerable并创建自己的Enumerator
。
答案 1 :(得分:0)
C#中的indexer syntax允许这样做,它看起来像这样:
public byte this[int index] {
get { return data[index]; }
set { data[index] = value; }
}
这定义了类型的索引器。用法就像
m[i] = 1;
但是,.NET中的许多数组和列表构造已经具有索引器,因此您可以定义字段/属性sites
,例如类型为List<byte>
。