0

输入:任何给定日期的所有销售数据,通过以下代码从字符串中提取:

class Program
{


static void Main(string[] args)
{
    List<Sale> Sales = new List<Sale>();

    // int l = 1;
    using (StreamReader reader = new StreamReader("file.dat"))
    {
        string line;
        var locations = new Dictionary<string, int[]>() {
            {"210", new [] {405, 4, 128, 12, 141, 12, 247, 15, 121, 3}},
            {"310", new [] {321, 4, 112, 12, 125, 12, 230, 15, 105, 3}}, 
            {"410", new [] {477, 4, 112, 12, 125, 12, 360, 15, 105, 3}} 
        };

        while ((line = reader.ReadLine()) != null)
        {


            var lineStart = line.Substring(0, 3);

            if (lineStart == "210" || lineStart == "310" || lineStart == "410")
            {
var currentLocations = locations[lineStart];
                    var letters = line.Substring(currentLocations[0], currentLocations[1]);
                var volume =
                    int.Parse(line.Substring(currentLocations[2], currentLocations[3])) +
                    int.Parse(line.Substring(currentLocations[4], currentLocations[5]));

                var price = long.Parse(line.Substring(currentLocations[6], currentLocations[7]));
                var mvolume = price * volume;
                var currency = line.Substring(currentLocations[8], currentLocations[9]);

这会从字符串中获取我想要的所需信息。

我有一个单独的类,具有与这些变量相同的字段(但名称略有不同)。

public class Sale
    {
        private int CashTotal;
        private string codeletters;
        private string Crncy;
}

在我的主要代码中,我有:

                   Sale s = new Sale();
                   Sales.Add(s);

(到目前为止,这是我的完整代码,只是分成几部分,它在程序中从上到下读取 - 除了新类)。

在这一点上,我正在努力做的是将每个 var 中的值加载到类中的字段中(将 Currency 存储为 Crncy,将 mvolume 存储为 totalcash,将字母存储为 codeletters),将该对象(Sale)存储到列出(销售),然后再次重复。我很确定有一个非常基本的解决方案,但如果我能想到的话,我会感到很满足。

编辑:对此感到抱歉,解决了那个问题并编辑了代码,因此,我将向您展示我尝试过的不起作用但应该传达我正在尝试做的事情的逻辑:

                    Sale.CashTotal = mvolume;
                    Sale.Crncy = currency;
                    Sale.codeletters = letters;

我已将字符串分解为其组成部分,但我只能将一个对象存储在列表中,因此我需要将它们重新组合为销售,并将其存储在列表中,但将这些值放入销售中是证明是有问题的。

4

1 回答 1

1

您已将字段声明为private,因此无法在课堂外访问它们。您可以声明一个公共构造函数并在那里传递值。您也可以仅使用访问器添加 publiv 属性get

public class Sale
{
    private int totalCash;
    public int TotalCash
    {
        get { return totalCash; }
    }

    private string codeletters;
    public string Codeletters
    {
        get { return codeletters; }
    }

    private string crncy;
    public string Crncy
    {
        get { return crncy; }
    }

    public Trade(int _totalCash, string _codeletters, string _crncy)
    {
        totalCash = _totalCash;
        codeletters = _codeletters;
        crncy = _crncy;
    }
}

然后将使用它:

Sale s = new Sale(mvolume,letters,currency);

或者你可以制作它们public

    public int TotalCash;
    public string codeletters;
    public string Crncy;

然而,公共领域绝对是糟糕的设计,所以你最好让它们成为自动属性:

    public int TotalCash {get; set;}
    public string CodeLetters {get; set;}
    public string Crncy {get; set;}

请阅读 MSDN 了解更多信息:访问修饰符

于 2012-12-07T08:35:36.367 回答