【发布时间】:2015-05-02 23:26:59
【问题描述】:
我需要为我的程序存储 3 个值。 第一个值是一个字节,第二个是另一个字节,最后一个是字符串。 一旦我使用了这些值,我希望能够删除它们。
我应该通过创建一个对象来存储它并将这 3 个值作为参数吗? 还是创建一个 3 维列表?
【问题讨论】:
-
您想在程序终止后保留这些值吗?或者只是将它们留在记忆中?
-
@JonBates 记忆犹新
标签: c#
我需要为我的程序存储 3 个值。 第一个值是一个字节,第二个是另一个字节,最后一个是字符串。 一旦我使用了这些值,我希望能够删除它们。
我应该通过创建一个对象来存储它并将这 3 个值作为参数吗? 还是创建一个 3 维列表?
【问题讨论】:
标签: c#
创建一个包含这三个值的类型。
class SomeData
{
private readonly byte _firstByte;
private readonly byte _secondByte;
private readonly string _stringData;
public byte FirstByte { get { return _firstByte; } }
public byte SecondByte { get { return _secondByte; } }
public string StringData { get { return _stringData; } }
public SomeData(byte first, byte second, string data)
{
_firstByte = first;
_secondByte = second;
_stringData = data;
}
}
编写的类是不可变的,但您可以根据需要逐步对其进行修改。
关于在使用后删除这些值:GC 会自动清除您不再引用的 SomeData 的任何实例。
【讨论】:
如果它们是相关的,则将它们放在一个类中,并将值作为字段或属性。
一旦它们的对象不再被使用,它就会被垃圾回收,所以它会被自动删除。
【讨论】:
一个简单的解决方案可能是使用Tuple,如果这适合您的需求,例如
var tuple = Tuple.Create(someBytes, moreBytes, myString);
您可以使用tuple.Item1、tuple.Item2 和tuple.Item3 访问这些值。
如果您需要,当然也可以使用多个Tuples,例如
var list = new List<Tuple<byte, byte, string>> {
tuple,
anotherTuple,
thirdTuple,
etc
};
正如其他人所提到的,如果您引用“喜欢”的数据,您应该创建一个 class。
【讨论】:
make、model、colour等。
Tuple.Create()省略类型参数。
如果您想在Tuple 和class 之间找到中间点,请尝试struct。
struct MyStruct
{
private byte _byte1;
private byte _byte2;
private string _string1;
public byte Byte1 { get { return _byte1; } }
public byte Byte2 { get { return _byte2; } }
public string String1 { get { return _string1; } }
public MyStruct(byte byte1, byte byte2, string string1)
{
_byte1 = byte1;
_byte2 = byte2;
_string1 = string1;
}
}
用法:
MyStruct thisthing = new MyStruct((byte)1, (byte)0, "Howdy!");
Debug.WriteLine(string.Format("{0},{1},{2}", thisthing.Byte1, thisthing.Byte2, thisthing.String1));
输出:
1,0,Howdy!
【讨论】:
这取决于您的项目的相关程度。如果它们与同一个父对象相关(例如,您正在为汽车建模,并且您正在存储 TransmissionType、Proce 和 Make),则将变量存储在一个类中是有意义的。
如果它们只是“工作值”,例如计算某些问题所需的,我会将它们存储为三个变量。
我的理由是,在几个月的时间里,一个好名字的变量(可能在一个好名字的类中)将使它们的用途一目了然,而无需在代码库中寻找线索。
【讨论】: