DOBON.NET DOBON.NETプログラミング掲示板過去ログ

List.AddRangeとList.Addの違い

環境/言語:[C#]
分類:[.NET]

2012/01/26(Thu) 11:12:34 編集(投稿者)

@
List<string> values = new List<string>();
values.AddRange(new string[] { string.Empty, string.Empty, string.Empty });


A
List<string> values = new List<string>();
values.Add(string.Empty);
values.Add(string.Empty);
values.Add(string.Empty);

@とAの違いを教えてください。
よろしくお願いします。

補足:
@はAでもいいか
Aは@でもいいか
ということが聞きたいです。
■No29676に返信(マナさんの記事)

> @とAの違いを教えてください。
> よろしくお願いします。
記述されている通り引数の型が配列であるかそうでないかです。
■No29677に返信(shuさんの記事)
> ■No29676に返信(マナさんの記事)
>
>>@とAの違いを教えてください。
>>よろしくお願いします。
> 記述されている通り引数の型が配列であるかそうでないかです。

返信ありがとうございます。

valuesの中を見てみると、
どちらも
values[0] = string.Empty
values[1] = string.Empty
values[2] = string.Empty
になっているのですが
どちらも意味は同じなのですか?
> どちらも意味は同じなのですか?

結果が同じであれば同じとしか答えようがないです

逆にどのような問題があってこのような疑問を感じているのかを
教えていただければそれなりの答えが帰ってくるかも知れません

パフォーマンスは違うようですよ
http://msdn.microsoft.com/ja-jp/vstudio/dd253129
■No29679に返信(Miraさんの記事)
>>どちらも意味は同じなのですか?
>
> 結果が同じであれば同じとしか答えようがないです
>
> 逆にどのような問題があってこのような疑問を感じているのかを
> 教えていただければそれなりの答えが帰ってくるかも知れません
>
> パフォーマンスは違うようですよ
> http://msdn.microsoft.com/ja-jp/vstudio/dd253129

ありがとうございます。
他人の作ったコードを見ているのですが、
DataGridViewにデータを登録するところで
Listにデータを登録し、
そのListをDataGridView.Rowに登録しているのですが、
同じ関数内でAddRangeとAddを両方使っているので
なぜ使い分けているのかわからず
質問させていただきました。
■No29681に返信(マナさんの記事)

> 同じ関数内でAddRangeとAddを両方使っているので
> なぜ使い分けているのかわからず
> 質問させていただきました。
どのような処理をしているのか分からないので憶測ですが
配列化するのに手間が掛かる部分がAddになっているのでは
ないでしょうか?
例)ループ内処理で1回に1要素しか生成または取得できないとか。
■No29681に返信(マナさんの記事)
> 同じ関数内でAddRangeとAddを両方使っているので
> なぜ使い分けているのかわからず
> 質問させていただきました。

一般論としてはパフォーマンスを考慮して使い分ける、コードの構造上 1 個ずつしか追加できないと言うことはあり得ます。
ただ、同じような配列を Add/AddRange と両方で、同じ関数内にて使い分けているのであれば、単に実装者が違った、それぞれの実装者が AddRange を知っている・知っていないが違ったというぐらいしか推測できません。

従って、書いた当人に聞けないのであれば、その理由を明らかにすることはできません。
返信が遅くなり申し訳ありません。
■No29685に返信(shuさんの記事)
処理はそのまま記載するわけには行かないので少々変えますが、
List<string> values = new List<string>();
values.AddRange(new string[] { string.Empty, string.Empty, string.Empty });
values.Add(string.Empty);
values.Add(string.Empty);
values.Add(string.Empty);
こんな感じです。
AddRangeで配列をいれ、そのあとAddでひとつずつ入れる
というようにしています。
また、全てString型をvaluesに入れています。
上記を見る限りだと
List<string> values = new List<string>();
values.AddRange(new string[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty });
これと変わらないのでは?と思ってしまうのです。

■No29689に返信(Azuleanさんの記事)
書いた当人が辞めてしまったため、聞くことが出来ません・・・。
明らかに出来ないということで納得することにしました。
■No29710に返信(マナさんの記事)

> List<string> values = new List<string>();
> values.AddRange(new string[] { string.Empty, string.Empty, string.Empty });
> values.Add(string.Empty);
> values.Add(string.Empty);
> values.Add(string.Empty);
> こんな感じです。

これだと分けている意味はなさそうですね。
■No29711に返信(shuさんの記事)
ありがとうございます。
やはり意味はないですよね・・・

意味のなさそうなところは
List<string> values = new List<string>();
values.AddRange(new string[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty });
これで統一するように修正しようと思います。

ありがとうございました!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板