これは私の最初の質問の編集です。そのため、割り当てをもう一度確認しました。すべてのコードは私の教授が望んでいるように機能していますが、以前に尋ねた私の質問だけが私の問題です。- list[1].s.ShowGrade(0) を使用せずに list[1].ShowGrade(0) のように、リストから直接 ShowGrade メソッドを実行するにはどうすればよいですか?? ここにすべてのコードを配置します。Main の 2 つのコンソール行は彼が望むもの (および彼が望む方法) であり、課題に対する私の制約は次のとおりです。2. デフォルトのコンストラクター以外のコンストラクターはまったくありません。3. ShowGrade メソッドは Course クラスにはありません。4.ノーオペレーター。(ドット) ShowGrade では [] のみ 5. メソッド Q1 では 1 つのクエリのみになります。
私のコードは次のとおりです。
コース。cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HW_1
{
public class Course
{
private delegate int Del(Course c);
internal string courseName { get; set; }
public class Student
{
internal string stuName { get; set; }
internal List<int> gradesList { get; set; }
//internal int ShowGrade(int index)
//{
// return gradesList[index];
//}
}
internal Student s = new Student();
public override string ToString()
{
string gr = null;
foreach (var g in s.gradesList)
gr += g + " ";
return string.Format("{0, -6} {1, -14} {2, -10}", courseName, s.stuName, gr);
}
}
}
Program.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HW_1
{
class Program
{
private delegate bool Del(Course c);
static void Main(string[] args)
{
List<Course> list = new List<Course>
{
new Course {courseName = "C#", s = new Course.Student {stuName = "Jojo", gradesList = new List<int>(){10, 20, 100}}},
new Course {courseName = "C", s = new Course.Student {stuName = "Bambi", gradesList = new List<int>(){99}}},
new Course {courseName = "Java", s = new Course.Student {stuName = "Bambi", gradesList = new List<int>(){}}}
};
Console.WriteLine("List of courses:");
Print(list);
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("Press P / p for students who passed in average 60 and those who didn't.");
Console.WriteLine("");
Console.WriteLine("Press # for C# courses and others.");
Console.WriteLine("");
Console.WriteLine("Press any other key for courses with student who have at least one grade of 100 and all oter courses.");
char ch = (char)Console.Read();
Del d = ((ch == 'P' || ch == 'p') ? (Del)(c => c.s.gradesList.Count > 0 && c.s.gradesList.Average() >= 60) : ((ch == '#') ? (Del)(c => c.courseName == "C#") : (Del)(c => c.s.gradesList.Contains(100))));
var x = Q1 <IGrouping<bool, Course>>(list, d);
Print(x);
Console.WriteLine("");
//Console.WriteLine(list[1].ShowGrade(0));
//Console.WriteLine(list[2].ShowGrade(3));
}
static IEnumerable<T> Q1<T>(IEnumerable<Course> list, Del d)
{
var query =
from c in list
orderby d(c)
group c by d(c) into g
select g;
return (IEnumerable<T>)query;
}
static void Print(IEnumerable<IGrouping<bool, Course>> list)
{
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Q1 Results:");
foreach (var g in list)
{
Console.WriteLine();
Console.WriteLine(g.Key);
Console.WriteLine("---------------");
foreach (var c in g)
Console.WriteLine(c);
}
}
static void Print<T>(IEnumerable<T> list)
{
foreach (var l in list)
Console.WriteLine(l);
}
}
}
2 つの Console.writeline の出力は次のようになります。
list[1].ShowGrade(0)
99
list[2].ShowGrade(3)