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

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

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

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

Q&A

解決済

2回答

2234閲覧

varを使用しなければいけない場面

KTMEI

総合スコア44

C#

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

0グッド

0クリップ

投稿2016/10/18 01:25

例えば、var moji = "aiueo";はstring moji = "aiueo";ですが、
varを使用しないとかけない場面というのはどのようなものが
あるのでしょうか。

ネットで調べていて、LINQを使う場合には必要というのは
わかったのですが、なぜLINQを使う場合に必要なのかが
わからず質問させていただきました。

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

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

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

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

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

guest

回答2

0

LINQを使う場合には必要

面倒なだけで必要ではないです。

例えば、

C#

1var xs = Enumerable.Range(1,10); 2var ys = xs.Where(x => x % 2 == 0).Select(x => x*2); 3foreach(var y in ys){ 4 Console.WriteLine(y); 5}

は、varを使わなければ、

C#

1IEnumerable<int> xs = Enumerable.Range(1,10); 2IEnumerable<int> ys = xs.Where(x => x % 2 == 0).Select(x => x*2); 3foreach(int y in ys){ 4 Console.WriteLine(y); 5}

また、匿名型を使っている場合は、
通常のクラスを一々宣言してそれを使うようにすればvarなしで書けます。

投稿2016/10/18 03:20

ozwk

総合スコア13521

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

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

KTMEI

2016/10/20 06:03

匿名型とLINQの理解がとても深まりました! varじゃなければかけないと思っていましたが、書こうと思えばかけるんですね! ただ、一々宣言するのが面倒な場合varがとても活躍しますね。 学びました!ありがとうございました!
guest

0

ベストアンサー

なぜLINQを使う場合に必要なのかがわからず質問させていただきました。

以下のコードのように匿名型を使うことが多いので var を使わざるを得ないということだと思います。

http://surferonwww.info/BlogEngine/post/2015/12/08/anonymous-type-and-distinct-method.aspx

投稿2016/10/18 01:31

編集2016/10/18 01:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

KTMEI

2016/10/18 02:14

ありがとうございます。 教えていただいたサイトやキーワードから再度ググって以下のサイトにたどり着いたのですが、ここでもう一つ質問があります。 http://csharp.keicode.com/basic/anonymous-types.php このサイト下部にあるコード(こうした場合の LINQ は次のように記述します。の後)について質問です。 コード内の以下の箇所ではvarを使用しています。 varは List<Person>型になると思うのですが、 List<Person> s = from・・・・・というようにはかけないのでしょうか。 ------------------------------------ var s = from a in p where a.Age < 30 select new { a.Name, a.City }; ------------------------------------
退会済みユーザー

退会済みユーザー

2016/10/18 02:49

コードは ``` と ``` で囲ってください。インデントされて見やすくなります。 ご自分で var を List<Person> に変えて試してみたでしょうか? new して作っているのが匿名型なのでダメだと思いますが。new 以下を a に代えて Person 型のコレクションを s に代入するようにしたら、List<Person> 型にできるかもしれません(未確認です。できないかも)。
ishi9

2016/10/18 05:16 編集

横から失礼します。 List<Person>にしたいなら、最後にToList()関数を呼んで下さい。 ちなみにToArray()関数を呼べばPerson[]型になります。 これらを呼ばない場合(つまり上記のコード)はIEnumerable<Person>型が返ります。
KTMEI

2016/10/18 05:40

To:SurferOnWwwさん >コードは ``` と ``` で囲ってください。インデントされて見やすくなります。 ありがとうございます。 >new 以下を a に代えて Person 型のコレクションを s に代入するようにしたら、List<Person> 型にできるかもしれません(未確認です。できないかも)。 > 以下のように試しましたが、匿名型なのでできませんでした。 ''' List<Person> s = from a in p where a.Age < 30 select new { a }; ''' To:ishi9さん 以下ということでしょうか。以下だと匿名型にToListメソッドが含まれていないとなり、コンパイルエラーになってしまいました。以下の認識であっていますでしょうか。 ''' List<Person> s = from a in p where a.Age < 30 select new { a.Name, a.City }.ToList(); '''
ishi9

2016/10/18 05:45 編集

(from ・・・ a.City}).ToList(); といった形で括弧で囲ってあげてください。 後、そのクエリ形式の書き方は今はあまり主流ではないのでメソッド形式のLinqの書き方で書くことをオススメします。 例 p.Where(a=>a.Age < 30).Select(a=> new {・・・}).ToList();
退会済みユーザー

退会済みユーザー

2016/10/18 06:04

コードは ``` と ``` で囲うというのはコメント欄ではダメなようですね。すみません。質問欄・解答欄ならインデントされるのでお試しください。 select new { a } は見当違いです。new { a.Name, a.City } を a に変えるということです。そうすると s に代入されるのは Person 型のコレクションへの参照になるはずです。ただし、IEnumerable<Person> 型になるので List<Person> 型には直接代入できないと思います。 ishi9 さんが言われるように、ToList() を使うのがよさそうです。 List<Person> s = (from a in p where a.Age < 30 select a).ToList(); ちなみに私が先のコメントで書いた「new して作っているのが匿名型なのでダメだと思いますが」というのは、new { a.Name, a.City } は匿名型なので s に代入されるのは匿名型のコレクション(IEnumerable<匿名型>)への参照になります。なのでそれを List<Person> 型には代入できませんということを言ってます。
KTMEI

2016/10/20 04:22

ishi9さん、SurferOnWwwさん お二人ともありがとうございました! LINQや匿名型についての理解が深まり、おっしゃっていることがわかってきました! 最後に念のため一つ質問させてください。 ishi9さんの提示していただいたコードを試していて 以下はコンパイルエラーになったのですが、 p.Where(a => a.Age < 30).Select(a => new { a.Name, a.City }).ToList(); これだとIEnumerable<匿名型>への参照になるという認識で良いでしょうか。
退会済みユーザー

退会済みユーザー

2016/10/20 05:22

p.Where(a => a.Age < 30).Select(a => new { a.Name, a.City }) は IEnumerable<匿名型> で、それに ToList() を適用して List<匿名型> になるはずです。なので、 var s = p.Where(a => a.Age < 30).Select(a => new { a.Name, a.City }).ToList(); とすればエラーにならないはず。お試しください。
KTMEI

2016/10/20 05:59

SurferOnWwwさん こういうときにvarが活躍するんですね! ありがとうございました!スッキリしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問