C# 中如何定义的 struct,可以使用 foreach
时间: 2024-09-30 08:11:27 浏览: 35
在 C# 中,`struct` 是一种值类型,类似于 Java 的 `class` 但是它更轻量级,存储在栈内存而非堆内存。如果你想让 `struct` 可以通过 `foreach` 循环遍历,你需要满足两个条件:
1. 定义一个公共的、无参的构造函数:因为 `struct` 默认没有公共构造函数,如果想要外部可以直接创建实例,就需要提供一个。
```csharp
public struct MyStruct
{
public int Value;
// 公共无参构造函数
public MyStruct()
{
Value = 0; // 初始化默认值
}
}
```
2. 实现 IEnumerable 或者 IEnumerable<T> 接口:虽然 `struct` 本身不具备这个功能,你可以选择给 `struct` 添加一个匿名类型的数组或者集合,并通过反射获取它的元素来支持 foreach。
```csharp
public struct MyStruct : IEnumerable<int>
{
private List<int> values = new List<int>();
public MyStruct(params int[] values)
{
this.values.AddRange(values);
}
public IEnumerator<int> GetEnumerator() => values.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => values.GetEnumerator();
public static implicit operator MyStruct(IEnumerable<int> values) => new MyStruct(values);
}
```
然后你可以这样做:
```csharp
MyStruct myStruct = new MyStruct(1, 2, 3);
foreach (int value in myStruct)
{
Console.WriteLine(value);
}
```
阅读全文