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

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

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

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

3回答

49470閲覧

[C#] LINQ を使って独自クラスリストの中身を更新したい

Mentol

総合スコア33

C#

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

2クリップ

投稿2016/11/18 03:35

###前提・実現したいこと
LINQ を使って独自クラスの中身を更新したいです。

###該当のソースコード
適当なデータを持つデータクラス↓

C#

1public class Data 2{ 3 public int A; 4 public int B; 5 ... 6 ... 7}

そのクラスのリストの中身を更新したいです。

C#

1var dataList = new List<Data>(); 2foreach (var data in dataList) 3{ 4 ++data.A; 5}

↑のforeachをLINQで書きたいです。
イメージはこんな感じですが、うまくいかないです。。。

C#

1var increment = dataList.Select(data => ++data.A);

ご助力おねがいします。

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

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

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

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

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

guest

回答3

0

selectは本来、出力の形を変える時に使うものです。そのコードだと返り値がintぽいのでint型の配列ができちゃうのかな?
無理にやろうとすると以下のような形になりますが、正直、linqの使い方としてはあまり有意義ではないので素直にforループの方がいい気がします。(後、linqはforループに比べて大分遅いです)

C#

1var increment = dataList.Select(data => { 2 ++data.A; 3 return data; 4});

投稿2016/11/18 03:59

ishi9

総合スコア1294

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

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

Mentol

2016/11/18 04:02

ありがとうございます! 調べててなんか違うなぁと思ってたので、スッキリしました笑
guest

0

ベストアンサー

List<T> になっているのなら,

cs

1dataList.ForEach(data => ++data.A);

でよいのではと思います。

投稿2016/11/18 03:51

ailen0ada

総合スコア25

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

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

Mentol

2016/11/18 04:01

ああああ!これです。これがやりたかったやつです。 ありがとうございましたー!
guest

0

LINQのSelectは、新しいインスタンスを生成するメソッドです。
今回質問に書かれたコード

var increment = dataList.Select(data => ++data.A);

だと、dataListの中身を更新するのではなく、Select句の中で指定した値のコレクションを生成するというコードになります。
それでもSelectで実装する必要があるなら

csharp

1var updated = dataList.Select(d => new Data() {A = ++d.A, B = d.B});

で実現できますが、dataListとは別のインスタンスを作るのでメモリの無駄です。
(dataListの更新前と後が両方必要な場合は、こうすればよいです。)

更新前後の両方のオブジェクトが必要ないのであれば、Foreachを使うのがベターです。

投稿2016/11/18 04:15

BEACHSIDE

総合スコア294

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

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

Mentol

2016/11/18 04:17

ありがとうございます! 更新後のデータと更新前のデータを持ちたいときに使わせていただきますb
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問