Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件中读取并查找max c#_C#_Struct_Procedures - Fatal编程技术网

从文件中读取并查找max c#

从文件中读取并查找max c#,c#,struct,procedures,C#,Struct,Procedures,我刚开始学习c#3个多月,所以作为家庭作业,我要做一个练习,从一个有50个名字和分数的文本文件中阅读。我必须找到带有最高标记的名称并显示它,然后将结果保存到文本文件中。这就是我想到的 namespace FINAL { class Program { public static string [] parts; struct StudentDetails { public string name;

我刚开始学习c#3个多月,所以作为家庭作业,我要做一个练习,从一个有50个名字和分数的文本文件中阅读。我必须找到带有最高标记的名称并显示它,然后将结果保存到文本文件中。这就是我想到的

namespace FINAL
{
    class Program
    {


       public  static string [] parts;

        struct StudentDetails
        {

            public string name; 
            public string surname; 
        };
        struct CourseWorkResults
        { public int mark;
        };
       static void Main(string[] args)
       {  

           string [] Lines = System.IO.File.ReadAllLines(@"F:\FINAL\StudentExamMarks.txt");
            foreach (string line in Lines)
           {
               string[] parts = line.Split();
            }
           StudentDetails[] Student = new StudentDetails[50];
            CourseWorkResults[] Results = new CourseWorkResults[50];


            GetName( ref Student ,ref parts );
            FindMark ( ref Results , parts);
            FindMax (ref Results);

        }
        static void GetName(ref StudentDetails[]Student,  ref string[] parts)
        {
            for (int i = 0; i < Student.Length; i++ )
            {
                Student[i].name = parts[0];
                Student[i].surname = parts[1];
            }
        }
       static void FindMark ( ref CourseWorkResults[]Results, string [] parts )
        {
            for (int i=0; i< Results.Length;i++)
            {
                Results[i].mark = Convert.ToInt16(parts[2]);
            }

        }
       static void FindMax( ref CourseWorkResults[]Results)
        {
            for (int i = 0; i < Results.Length; i++)
            {
                int max = 0;
                max = Results[2].mark;
                if (Results[i].mark > max)
                {
                    max = Results[i].mark;
                }
            }
        }
       static void DisplayResults( ref CourseWorkResults[]Results, StudentDetails[]Student, int max)

           {

        Console.WriteLine(" The student with the highest score is {0} {1} :{2}", Student[0].name, Student[1].surname, max);
           } 
   }
 }
namespace FINAL
{
班级计划
{
公共静态字符串[]部分;
struct StudentDetails
{
公共字符串名称;
公共字符串姓氏;
};
结构课程工作结果
{公共整数标记;
};
静态void Main(字符串[]参数)
{  
string[]Lines=System.IO.File.ReadAllLines(@“F:\FINAL\StudentExamMarks.txt”);
foreach(行中的字符串行)
{
string[]parts=line.Split();
}
StudentDetails[]Student=新的StudentDetails[50];
CourseWorkResults[]结果=新的CourseWorkResults[50];
GetName(参考学生,参考部分);
FindMark(参考结果、零件);
FindMax(参考结果);
}
静态void GetName(ref StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i最大值)
{
max=结果[i]。标记;
}
}
}
静态无效显示结果(参考CourseWorkResults[]Results,StudentDetails[]Student,int max)
{
Console.WriteLine(“得分最高的学生是{0}{1}:{2}”,学生[0]。姓名,学生[1]。姓氏,max);
} 
}
}

我的问题是GetName过程,我不能通过引用传递部件。我做错了什么

这里的问题是
struct
是一种不可变的值类型。所以当你写作时:

 Student[i].name = parts[0];
您正在尝试修改本地文件,以创建
学生[i]
的副本。实际上,每次尝试访问
Student[i]
,它都会返回一个复制的值,而不是列表上的实例

解决方法是将
StudentDetails
作为
class
而不是
struct

  class StudentDetails
  {
      public string name; 
      public string surname; 
  };
该问题也适用于
CourseWorkResults
struct

此外,as数组已在.NET中引用。除非希望它引用另一个对象,否则实际上不需要将其作为引用传递。即:

    static void GetName(StudentDetails[]Student,  ref string[] parts)
    {
        for (int i = 0; i < Student.Length; i++ )
        {
            Student[i].name = parts[0];
            Student[i].surname = parts[1];
        }
    }
static void GetName(StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
将作为

    static void GetName(ref StudentDetails[]Student,  ref string[] parts)
    {
        for (int i = 0; i < Student.Length; i++ )
        {
            Student[i].name = parts[0];
            Student[i].surname = parts[1];
        }
    }
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
除非您添加以下内容:

    static void GetName(ref StudentDetails[]Student,  ref string[] parts)
    {
        Student = anotherStudentArray ; // Here the ref param is really needed as you want to reassign Student to a new array instance

        for (int i = 0; i < Student.Length; i++ )
        {
            Student[i].name = parts[0];
            Student[i].surname = parts[1];
        }
    }
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
Student=anotherStudentArray;//这里确实需要ref参数,因为您要将Student重新分配给新的数组实例
for(int i=0;i
这里的问题是
结构是一种不可变的值类型。所以当你写作时:

 Student[i].name = parts[0];
您正在尝试修改本地文件,以创建
学生[i]
的副本。实际上,每次尝试访问
Student[i]
,它都会返回一个复制的值,而不是列表上的实例

解决方法是将
StudentDetails
作为
class
而不是
struct

  class StudentDetails
  {
      public string name; 
      public string surname; 
  };
该问题也适用于
CourseWorkResults
struct

此外,as数组已在.NET中引用。除非希望它引用另一个对象,否则实际上不需要将其作为引用传递。即:

    static void GetName(StudentDetails[]Student,  ref string[] parts)
    {
        for (int i = 0; i < Student.Length; i++ )
        {
            Student[i].name = parts[0];
            Student[i].surname = parts[1];
        }
    }
static void GetName(StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
将作为

    static void GetName(ref StudentDetails[]Student,  ref string[] parts)
    {
        for (int i = 0; i < Student.Length; i++ )
        {
            Student[i].name = parts[0];
            Student[i].surname = parts[1];
        }
    }
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
除非您添加以下内容:

    static void GetName(ref StudentDetails[]Student,  ref string[] parts)
    {
        Student = anotherStudentArray ; // Here the ref param is really needed as you want to reassign Student to a new array instance

        for (int i = 0; i < Student.Length; i++ )
        {
            Student[i].name = parts[0];
            Student[i].surname = parts[1];
        }
    }
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
Student=anotherStudentArray;//这里确实需要ref参数,因为您要将Student重新分配给新的数组实例
for(int i=0;i
若要补充此答案,我建议阅读POCO并将其用作数据存储。若要补充此答案,我建议阅读POCO并将其用作数据存储。