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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

2回答

5308閲覧

Listの要素を消すときRemoveで指定していない項目が削除されてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

2クリップ

投稿2019/10/09 06:48

前提・実現したいこと

C#で簡単なプログラムを作成して動作テストをする勉強会を行っています。
string型のList[System.Collections.Generic]を
作成して、リストからn番目のデータを消すために
Removeメソッドを用いて削除をしようとしているのですが、
削除できません。

項目も完全に一致しているのに削除できないことはなにか理由があるのでしょうか。

※今回はList<A>をfor文で回し、RemoveAtでインデックスを指定して削除するようにしました。

教えていただけると幸いです。

発生している問題・エラーメッセージ

エラーメッセージは特になし リストから削除されるitemはリストの先頭行でした。

該当のソースコード

C#

1 2using System; 3using System.Linq; 4using System.Collections.Generic; 5 6//インスタンスを生成 7List<String> list = new List<String>(); 8 9list.Add("a"); 10list.Add("b"); 11list.Add("c"); 12 13//bを削除 14list.Remove("b"); 15

試したこと

今回はList<A>をfor文で回し、一致する行でRemoveAtでインデックスを指定して削除するようにしました。
しかし、なぜ該当する項目を削除できない場合があるのか教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

Visual Studio Community2017
コンソール出力してテストをしています。

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

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

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

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

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

YAmaGNZ

2019/10/09 06:59

提示されたコードを実行しても現象が再現できません。 List<String> list = new List<String>(); list.Add("a"); list.Add("b"); list.Add("c"); //bを削除 list.Remove("b"); foreach(var item in list) { Console.WriteLine(item); } を実行したところ a c と出力されます。
退会済みユーザー

退会済みユーザー

2019/10/09 07:30

> 今回はList<A>をfor文で回し、 そこは質問のコードに書いてないのでは? もしそうであれば実際はどうやっているか、for で回すところも含めて書いてください。for で回しながら for の中で要素を削除するとかしてませんか?
YAmaGNZ

2019/10/09 07:44

Removeで希望の項目が消えなかったからforで回して回避したってことでしょ
ozwk

2019/10/09 09:14

本当にstringですか?
Zuishin

2019/10/11 10:01

ログインしているなら何か言ってください。質問のコードで b の代わりに a が削除されることはありません。何か他に条件があるはずです。
guest

回答2

0

質問のコードでは削除されました。確かめ方が間違っているんだと思います。

投稿2019/10/09 06:55

Zuishin

総合スコア28660

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

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

Zuishin

2019/10/09 08:11 編集

string という前提で回答しています。質問にそう書いてあるので。
guest

0

for を使っているらしいのでこうかなと思ったのですが問題はありません。

C#

1 for (var i = list.Count; i-- > 0;) 2 { 3 list.RemoveAt(i); 4 }

わざと削除したインデックスを飛ばすように書けば残りますがそういうことでしょうか?

C#

1 for (var i = 0; i < list.Count; i++) 2 { 3 list.RemoveAt(i); 4 } 5

投稿2019/10/09 07:39

x_x

総合スコア13749

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

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

YAmaGNZ

2019/10/09 07:46

forで回して希望の項目をRemoveAtで消したというのは回避策であって、質問はRemoveで希望の項目が削除できなかったということなのでは?
x_x

2019/10/09 08:14

どちらにせよです
Zuishin

2019/10/09 08:39

二番目のコードはちゃんと動かないのではないかと思います。
x_x

2019/10/09 08:57

ちゃんと動かないのを載せています
Zuishin

2019/10/09 09:07

例外が出ませんか?
x_x

2019/10/09 09:46

例外にはなりませんでしたが、"b"が残ります。 (そうしているのですが)
Zuishin

2019/10/09 09:54

なるほど。勘違いしていたようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問