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

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

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

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

LINQ

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

Q&A

解決済

1回答

559閲覧

クラスのインスタンス作成・初期化する際、引数にリストがあった場合どのように初期化すればいいのか分かりません。

wikwik129

総合スコア19

C#

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

LINQ

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

2グッド

0クリップ

投稿2023/12/20 19:57

実現したいこと

クラスのインスタンス作成時の初期化する際、クラス内にリストの初期化があった場合どのように記入すればいいのかわかりません。
以下サイトのコードをそのままコピペで動かそうとすると、GetStudents()メソッドのStudentクラスを初期化する箇所でエラーメッセージが表示されてしまいます。最初見たときは、リストを配列のような書き方で初期化できるんだと思ったのですが、実行できずどのような対処をしていいのか分からず質問しました。

こちらのサイトの「ブールでグループ化する」という箇所の見本コードです。
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/group-clause

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

GetStudents()メソッド内でStudentクラスに値を入れてインスタンス化する際、Scoresに値を入れる箇所でエラーが発生します。

エラー CS1525 '[' は無効です

該当のソースコード

class GroupSample1 { // The element type of the data source. public class Student { public required string First { get; init; } public required string Last { get; init; } public required int ID { get; init; } public required List<int> Scores; } public static List<Student> GetStudents() { // Use a collection initializer to create the data source. Note that each element // in the list contains an inner sequence of scores. List<Student> students = [ new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= [97, 72, 81, 60]}, new Student {First="Claire", Last="O'Donnell", ID=112, Scores= [75, 84, 91, 39]}, new Student {First="Sven", Last="Mortensen", ID=113, Scores= [99, 89, 91, 95]}, new Student {First="Cesar", Last="Garcia", ID=114, Scores= [72, 81, 65, 84]}, new Student {First="Debra", Last="Garcia", ID=115, Scores= [97, 89, 85, 82]} ]; return students; } static void Main() { // Obtain the data source. List<Student> students = GetStudents(); // Group by true or false. // Query variable is an IEnumerable<IGrouping<bool, Student>> var booleanGroupQuery = from student in students group student by student.Scores.Average() >= 80; //pass or fail! // Execute the query and access items in each group foreach (var studentGroup in booleanGroupQuery) { Console.WriteLine(studentGroup.Key == true ? "High averages" : "Low averages"); foreach (var student in studentGroup) { Console.WriteLine(" {0}, {1}:{2}", student.Last, student.First, student.Scores.Average()); } } } } /* Output: Low averages Omelchenko, Svetlana:77.5 O'Donnell, Claire:72.25 Garcia, Cesar:75.5 High averages Mortensen, Sven:93.5 Garcia, Debra:88.25 */

試したこと

Listの初期化処理をいろいろ書いてみましたが分かりません。

TN8001👍を押しています
fanaを押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初見たときは、リストを配列のような書き方で初期化できるんだと思った

「コレクション式」というC#12の新機能です。
C# 12 の新機能 - C# ガイド - C# | Microsoft Learn

Visual Studio 2022を更新して最新バージョンにしてください。
プロジェクトを作る際の「フレームワーク」は、.NET8.0を選択してください。

この場合の意味はこれと同じです(実行したいだけならこの8行を書き換えるだけでたぶん動くと思います)

cs

1List<Student> students = new List<Student> 2{ 3 new Student { First = "Svetlana", Last = "Omelchenko", ID = 111, Scores = new List<int> { 97, 72, 81, 60 } }, 4 new Student { First = "Claire", Last = "O'Donnell", ID = 112, Scores = new List<int> { 75, 84, 91, 39 } }, 5 new Student { First = "Sven", Last = "Mortensen", ID = 113, Scores = new List<int> { 99, 89, 91, 95 } }, 6 new Student { First = "Cesar", Last = "Garcia", ID = 114, Scores = new List<int> { 72, 81, 65, 84 } }, 7 new Student { First = "Debra", Last = "Garcia", ID = 115, Scores = new List<int> { 97, 89, 85, 82 } } 8}; 9 10//List<Student> students = 11//[ 12// new Student { First = "Svetlana", Last = "Omelchenko", ID = 111, Scores = [97, 72, 81, 60] }, 13// new Student { First = "Claire", Last = "O'Donnell", ID = 112, Scores = [75, 84, 91, 39] }, 14// new Student { First = "Sven", Last = "Mortensen", ID = 113, Scores = [99, 89, 91, 95] }, 15// new Student { First = "Cesar", Last = "Garcia", ID = 114, Scores = [72, 81, 65, 84] }, 16// new Student { First = "Debra", Last = "Garcia", ID = 115, Scores = [97, 89, 85, 82] } 17//];

Listの初期化処理をいろいろ書いてみましたが分かりません。

書き換えたほう(今までの方法)は、「コレクション初期化子」といいます。
オブジェクト初期化子とコレクション初期化子 - C# プログラミング ガイド - C# | Microsoft Learn

参考コードに英語のコメントが付いてますが、「collection initializer」は間違いで「Collection expressions」が正しいと思います(変え忘れたのかなぁ?)

投稿2023/12/20 22:06

編集2023/12/20 22:09
TN8001

総合スコア9326

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

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

wikwik129

2023/12/20 22:55

アップデートと確認作業で返信遅れましたすいません。 ご指摘の通りバージョンが古いのが原因で提示していただいた今までの方法での書き方でも問題なく動きました。 またご丁寧に参考サイトまで添付していただきい有難うございます。 お恥ずかしながらアップデートが入ったことすら知りませんでした。大変失礼しました。 他のアップデート内容にもちゃんと目を通したいと思います。 迅速な対応ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問