質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

3回答

358閲覧

C# の for文について

MarkAndrews

総合スコア49

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/25 00:47

編集2018/05/25 01:28

JavaScriptで for文を

js

1for ( var i = 0, len = array.length; i < len; i++ ) { 2 console.log(array[i]); 3}

と書けますが

C#で for文を

c#

1using System; 2using System.Collections; 3public class Program{ 4 public static void Main(){ 5 string [] array = { "array1", "array2" }; 6 for ( var i = 0, len = array.Length; i < len; i++ ) { 7 Console.WriteLine(array[i]); 8 } 9 } 10}

と書けないですか?

Microsoft (R) Visual C# Compiler バージョン 2.8.0.62830 (e595ee27) Copyright (C) Microsoft Corporation. All rights reserved. files.cs(7,15): error CS0819: 暗黙的に型指定された変数は、複数の宣言子を持つことができません。

このようなエラーが発生します。

やはり C#の場合は

c#

1var len = array.Length; 2for ( var i = 0; i < len; i++ ) { 3 Console.WriteLine(array[i]); 4}

or

c#

1for ( var i = 0; i < array.Length; i++ ) { 2 Console.WriteLine(array[i]); 3}

と書くべきなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/25 00:49

実際に実行、またはfor文の仕様を確認されたのでしょうか? < と書けないですか?
guest

回答3

0

試してできないが故の質問だとしたら、CS0819: Implicitly-typed variables cannot have multiple declaratorsになっているのかもしれない。
これだったら var i=0, len ..ではなくint i=0, len=...としてやればできる

-- 余談
個人的には、javascriptだと重さの観点から毎回上限値を評価するより、最初に1回だけ取りたいという気分は分からなくもないです。でも、c#なら(javascriptも最近はそうですが)違うことを考えたほうがいいように思います(例えば。array変数が配列なら、array.lengthは定数展開される可能性すらあり(本当にそうかは知りません)、だとしたらlenはただのメモリの無駄になる可能性がある)。

投稿2018/05/25 01:08

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/05/25 06:15

何が無難で何が一般的かは異論の多いところかと思いますが、 foreach(var item in array) { Console.WriteLine(item); } とか、 Console.WriteLine(string.Join(Environment.NewLine, array)); とか、 のほうが無難じゃないかと思います
guest

0

files.cs(7,15): error CS0819: 暗黙的に型指定された変数は、複数の宣言子を持つことができません。

エラーからですと、var を int に変えれば良いことになります。
後はどのような意図で書き換えたいかによりますね。

ちなみに、

string[] array = { "array1", "array2" }; for (int i = 0, len = array.Length; i < len; i++) { Console.WriteLine(array[i]); } for (int i = 0; i < array.Length; i++) { Console.WriteLine(array[i]); }

のコンパイル後の逆アセンブルでは、

string[] strArrays = new string[] { "array1", "array2" }; int num = 0; int length = (int)strArrays.Length; while (num < length) { Console.WriteLine(strArrays[num]); num++; } for (int i = 0; i < (int)strArrays.Length; i++) { Console.WriteLine(strArrays[i]); }

こうなってました。

投稿2018/05/25 01:45

mituha

総合スコア385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MarkAndrews

2018/05/25 05:22

JavaScript風には 皆様の回答の様に **int** で 複数定義できるようになりました。 回答頂いた逆コンパイル?を 見ると  whileを使っている上のソースが気に入りましたが、 下のソースの方が無難で一般的かなという感じがします。 ```c# using System; public class Program{ public static void Main(){ string [] array = { "array1", "array2" }; for ( int i = 0, len = array.Length; i < len; i++ ) { Console.WriteLine(array[i]); } } } ``` ```c# using System; public class Program{ public static void Main(){ string [] array = { "array1", "array2" }; for ( int i = 0; i < array.Length; i++ ) { Console.WriteLine(array[i]); } } } ```
mituha

2018/05/25 07:08

無難かと言われると、indexが意味をもたず、単に列挙したいなら、papinianusさんがコメントされているように、foreach を使用するのが良いかもしれません。 もっとも、コンパイルされると for に展開されるっぽいですが。 ちなみに、https://www.telerik.com/products/decompiler.aspx でデコンパイルしました
guest

0

ふつーに書けますよ。


しかし、わざわざ変数を用意するより、

C#

1for ( var i = 0; i < array.Length; i++ ) { 2 Console.WriteLine(array[i]); 3}

のほうがよくないですか?

投稿2018/05/25 00:50

編集2018/05/25 00:54
y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問