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);

(これはこれまでの私の完全なコードであり、部分に分割されただけで、プログラム内と同じように上から下に読み取られます-新しいクラスは別として)。

この時点で私が苦労しているのは、各変数の値をクラスのフィールドにロードし(CurrencyをCrncyとして、mvolumeをtotalcashとして、文字をcodelettersとして保存)、そのオブジェクト(Sale)をに保存することです。リスト(販売)して、もう一度繰り返します。私はこれに対する本当に基本的な解決策があるとかなり確信していますが、私がそれを考えることができれば私は詰め込まれています。

編集:申し訳ありませんが、それを解決し、コードを編集しました。それに応じて、私が試したことは機能しませんでしたが、私がやろうとしていることの論理を伝える必要があります。

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

文字列を構成要素に分解しましたが、リストに格納できるオブジェクトは1つだけなので、それらをSaleとして再結合し、代わりにリストに格納する必要がありますが、これらの値をSaleに取得するのは問題があることを証明します。

4

1 に答える 1

1

フィールドを として宣言しprivateたため、クラスからアクセスできません。public コンストラクターを宣言して、そこに値を渡すことができます。また、アクセサーのみを使用して 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 をお読みください: Access Modifiers

于 2012-12-07T08:35:36.367 に答える