如何在 asp c# 的结构中定义列表
本文关键字:结构 定义 列表 asp | 更新日期: 2023-09-27 18:33:39
如何将列表定义为结构字段?
像这样:
public struct MyStruct
{
public decimal SomeDecimalValue;
public int SomeIntValue;
public List<string> SomeStringList = new List<string> // <<I Mean this one?
}
然后像这样使用该字符串:
Private void UseMyStruct()
{
MyStruct S= new MyStruct();
s.Add("first string");
s.Add("second string");
}
我已经尝试了一些方法,但它们都返回错误并且不起作用。
结构中不能有字段初始值设定项。
原因是字段初始值设定项实际上已编译为无参数构造函数,但结构中不能具有无参数构造函数。
不能使用无参数构造函数的原因是,结构的默认构造是用零字节擦除其内存。
但是,您可以做的是:
public struct MyStruct
{
private List<string> someStringList;
public List<string> SomeStringList
{
get
{
if (this.someStringList == null)
{
this.someStringList = new List<string>();
}
return this.someStringList;
}
}
}
注意:这不是线程安全的,但如果需要,可以将其修改为线程安全。
结构中的公共字段是邪恶的,当你不看时会从背后捅到你!
也就是说,您可以在(参数完整)构造函数中初始化它,如下所示:
public struct MyStruct
{
public decimal SomeDecimalValue;
public int SomeIntValue;
public List<string> SomeStringList;
public MyStruct(decimal myDecimal, int myInt)
{
SomeDecimalValue = myDecimal;
SomeIntValue = myInt;
SomeStringList = new List<string>();
}
public void Add(string value)
{
if (SomeStringList == null)
SomeStringList = new List<string>();
SomeStringList.Add(value);
}
}
请注意,如果有人使用默认构造函数,则SomeStringList
仍将为 null:
MyStruct s = new MyStruct(1, 2);
s.SomeStringList.Add("first string");
s.Add("second string");
MyStruct s1 = new MyStruct(); //SomeStringList is null
//s1.SomeStringList.Add("first string"); //blows up
s1.Add("second string");