【问题标题】:Best way to store 3 values? [closed]存储3个值的最佳方法? [关闭]
【发布时间】:2015-05-02 23:26:59
【问题描述】:

我需要为我的程序存储 3 个值。 第一个值是一个字节,第二个是另一个字节,最后一个是字符串。 一旦我使用了这些值,我希望能够删除它们。

我应该通过创建一个对象来存储它并将这 3 个值作为参数吗? 还是创建一个 3 维列表?

【问题讨论】:

  • 您想在程序终止后保留这些值吗?或者只是将它们留在记忆中?
  • @JonBates 记忆犹新

标签: c#


【解决方案1】:

创建一个包含这三个值的类型。

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 的任何实例。

【讨论】:

    【解决方案2】:

    如果它们是相关的,则将它们放在一个类中,并将值作为字段或属性。

    一旦它们的对象不再被使用,它就会被垃圾回收,所以它会被自动删除。

    【讨论】:

    【解决方案3】:

    一个简单的解决方案可能是使用Tuple,如果这适合您的需求,例如

    var tuple = Tuple.Create(someBytes, moreBytes, myString);
    

    您可以使用tuple.Item1tuple.Item2tuple.Item3 访问这些值。


    如果您需要,当然也可以使用多个Tuples,例如

    var list = new List<Tuple<byte, byte, string>> {
        tuple,
        anotherTuple,
        thirdTuple,
        etc
    };
    

    正如其他人所提到的,如果您引用“喜欢”的数据,您应该创建一个 class

    【讨论】:

    • “喜欢”数据是什么意思?我的 Connect4 游戏需要这个。它检查连续有 2 个的位置,然后添加数据。第一个值是玩家 1 或 2。
    • 正如@JonBates 在他的回答中所描述的那样,基本上。例如存储汽车信息,如makemodelcolour等。
    • 你可以用Tuple.Create()省略类型参数。
    • @unarist 很好,我不知道那种方法 - 使事情变得 slightly easier - 谢谢!
    【解决方案4】:

    如果您想在Tupleclass 之间找到中间点,请尝试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!
    

    【讨论】:

      【解决方案5】:

      这取决于您的项目的相关程度。如果它们与同一个父对象相关(例如,您正在为汽车建模,并且您正在存储 TransmissionType、Proce 和 Make),则将变量存储在一个类中是有意义的。

      如果它们只是“工作值”,例如计算某些问题所需的,我会将它们存储为三个变量。

      我的理由是,在几个月的时间里,一个好名字的变量(可能在一个好名字的类中)将使它们的用途一目了然,而无需在代码库中寻找线索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-11
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 2012-10-16
        • 2013-04-01
        相关资源
        最近更新 更多