を教えてくださいあなたは持っている問題はここにある:
number.ToString().Equals("Even");
これはnumber
の文字列表現を取得して、平等のためにそれを比較しています文字列Even
に対して、結果を何もしないでください。あなたが戻ってこれを考えても、それは意味がありません。が偶数ならばEven
を印刷したいからです。あなたの現在のプログラムでは
、あなたはこのようなことを行うことができます:あなたがきたかのように、それは思われないよう、改善される可能性があなたのプログラムとのいくつかは、そこにあると述べ
if (Convert.ToInt32(number) % 2 == 0)
{
Console.WriteLine("{0} is even", number);
}
C#の型システムのハングアップをちょうど得ました。
まず、あなたがそうのように100個のオブジェクトの配列を宣言されています。代わりにobject
を使用しての、
object[] numbers = new object[100];
あなたはすでにあなたが整数で仕事をしたい知っているので、あなたはint
を使用する必要があります。
int[] numbers = new int[100];
次は、1
から整数のシーケンスを生成している - 100
:
numbers = Enumerable.Range(1, 100).Cast<object>().ToArray();
Enumerable.Range()
は整数のコレクションを返し、.ToArray()
はそれを整数の配列に変換します。私たちは今、整数の配列を使用しているとして、そこobject
にそれらをキャストする必要がないので、これはのように簡略化することができます。これに行うことができる一つのさらなる簡素化があり
numbers = Enumerable.Range(1, 100).ToArray();
。 Enumerable.Range()
は、整数の集合を表すIEnumerable<int>
を返します。これは代わりに、100個の整数の配列を宣言する整数の集合を生成し、配列にそれらを変換し、numbers
にそれらを割り当てるので、私たちが代わりにこれを行うことができますことを意味します
IEnumerable<int> numbers = Enumerable.Range(1, 100);
することができ、他の変更はありここで行ったが、私はそうのは、ループを見てみましょうこの回答の最後で説明します:
foreach (object number in numbers)
{
if (Convert.ToInt32(number) % 2 == 0)
{
Console.WriteLine(number);
}
}
私たちが代わりにobject[]
のIEnumerable<int>
を使用するコードを変更してきたように、私たちは今の宣言を変更することができますループ:
foreach (int number in numbers)
IEnumerable
を実装するタイプでは、foreach
を使用できるため、これが可能です。
IEnumerable<Student> students = GetStudents();
我々はこのようなものを超えるループができます:
foreach (Student student in students)
今、あなたのループに戻ってnumber
がint
であることを、我々はドン」別の例として、場合に私たちは、学生のコレクションを持っていましたそれが偶数であるかどうかを確認する前に、object
からint
に変換する必要があります。理解するための主なものは、あなたが既にあなたが使用したいのですがどのような種類を知ったときにいつでもすることができます、それは常に簡単になりますように、あなたは常に、それを使用するべきであるということです
foreach (int number in numbers)
{
if (number % 2 == 0)
{
Console.WriteLine("{0} is even", number);
}
}
:だからループのコードは、のように簡略化することができますあなたが書いたコード。完全なプログラムは現在、次のようになります。var
キーワードを決定するためにimplicit type inferenceを利用している
var numbers = Enumerable.Range(1, 100);
:私が述べた他の変更については
class Program
{
static void Main(string[] args)
{
IEnumerable<int> numbers = Enumerable.Range(1, 100);
foreach (int number in numbers)
{
if (number % 2 == 0)
{
Console.WriteLine("{0} is even", number);
}
}
Console.Read();
}
}
を、あなたの整数の生成コードはに単純化することができnumbers
タイプ。同様に、ループを次のように変更することもできます。
foreach (var number in numbers)
ここでは暗黙の型推論については心配しません。私は完全性のためにもっと言及していますが、まず型システムを適切に使うことを学ぶべきです。
なぜint []を使用しませんか?既にコードを単純化するでしょう。あなたは "EVEN"を出力しなければならず、例えばEVENの値を "EVEN"と比較しないでください – Bart