2017-01-16 10 views
1

私は自分の知識を丸めるためにいくつかのオンラインコースからC#でプログラムを習得しようとしています。それは非常に挑戦的であることが証明されています。私は理解していると思っているようですが、実際の練習をするために座っていると、しばしば困惑します。私はそれが好きな傾向があります。なぜなら、問題が発生したときに研究して作業する方法を勉強しなければならないからです。なぜリストのMy Countが0になっていますか?

これで、私は理解できないようないくつかのハードルがあります。私はそれらを見たいと思えば実践的な練習への答えを持っていますが、私はそれをしたくありません。

私は実際に仕事の内容を分かち合いたいとは思っていません。私はそれを解決する手助けをしたくないからです。私を助けようとする人は、とにかくそれを知る必要があるとは思いません。

以下のコードでは、実際に何が起こっているかを理解するのに役立ちます。私は知っている、私は知っている、それは非常に一般的なように聞こえるが、私は本当に私の質問を適切に表現する方法を本当に知っている新しいです。

私の質問は次のとおりです。「listNumbers」リストの要素数がゼロになっているのはなぜですか?私はハイフンで区切って入力をユーザーに尋ねる

私のロジックはこれです。 私はその入力を受け取り、ハイフンで文字列配列に分割します。 空のリストを作成します。 文字列配列の各要素をループし、int32に変換してリストに追加します。 私は、何回ループしているかを見るためにカウンターを置いています。これは、最初に入力された数字の数に基づいて正確に示しています。 リストの各要素を2番目のカウンタでループして、何回ループしたかを確認します。これは最初に何個の数字が入力されたかに基づいて正確に表示されます。

しかし、リスト内の要素の数はゼロとして表示されます。リストに要素がないようです。

どのようにすることができますか?

リストの要素数がゼロになっている理由を説明できる人はいますか?

ありがとうございました。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication10 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Please enter a few numbers separated by a hyphen and then press 'Enter'."); 
      var userInput = Console.ReadLine(); 
      var numbers = userInput.Split('-'); 

      var listNumbers = new List<Int32>(); 
      var counter1 = 0; // Just for troubleshooting 
      var counter2 = 0; // Just for troubleshooting 

      var count = listNumbers.Count; 

       foreach (string number in numbers) 
        { 
        var convertedNumber = Convert.ToInt32(number); 
        listNumbers.Add(convertedNumber); 
        counter1++; // Just for troubleshooting 
        } 

       foreach (int listNumber in listNumbers) 
        { 
        counter2++; // Just for troubleshooting 
        Console.WriteLine(listNumber); // Just for troubleshooting 
        } 

      // Just for troubleshooting 
      Console.WriteLine("----------"); 
      Console.WriteLine("Count of loops through coversion from string to int32 and adding each to list: " + counter1); 
      Console.WriteLine("Count of loops through the list itself: " + counter2); 
      Console.WriteLine("Count of elements in list: " + count); 

     } 
    } 
} 
+3

あなたは決して更新しません。 – Jonesopolis

答えて

6

リストに要素がない場合は、変数 "count"に値を割り当てただけです。宣言したローカルの "count"変数は、リストが大きくなると自動的に更新されません。リスト自体の 'Count'プロパティだけがそれを行います。

空のときにリスト内の要素の数ではなく、追加した後にリストの要素数を取得する必要がありますそれに対するすべての要素。

だから、次の行を削除します。

var count = listNumbers.Count; 

を、すぐに2つのforeach文の後にまったく同じ行を追加します。

または、その変数を一度参照しているだけなので、上記のカウント変数を完全に削除して、最後のコンソールを置き換えることができます。

Console.WriteLine("Count of elements in list: " + listNumbers.Count); 
+0

*額を叩くようになりました。ありがとうございました。おそらく、研究を通して何が間違っているのかを解明し、トラブルシューティングを試みるのに8時間を費やしました。 –

0

単に変更:以下とWriteLineメソッド

Console.WriteLine("Count of elements in list: " + count); 

Console.WriteLine("Count of elements in list: " + listNumbers.Count); 

に新しいアイテムを追加する前に、現在のコレクション内の項目を数えています。カウントの更新リストを取得するには、アイテムを追加した後にlistNumbers.Count fuctionを呼び出す必要があります。

+0

これはすでにもう一つの答えです。 – pabrams

関連する問題