Другие охватили переопределение ToString()
, поэтому я не буду перефразировать эту информацию. Более того, по вашему запросу:
Может кто-нибудь, пожалуйста, помогите мне и скажите мне, как правильно использовать структуры в приведенном выше примере.
См. MSDN: Проектирование структуры
Во-первых, ваша структура изменчива. Неизменяемые структуры не всегда являются лучшим решением 1015 *, но их следует учитывать ... см. Статью о том, как Microsoft использует структуры внутри класса Dictionary . Тем не менее, я бы определил основное требование: Требует ли структура изменчивости? Другими словами, изменится ли имя студента, номер единицы или отметка после создания экземпляра структуры?
Во-вторых, если требуется иметь коллекцию StudentDetails
, массив в порядке:
// declare students collection
StudentDetail[] students = new StudentDetail[5];
// declare an array indexer
int indexer = 0;
static void Main(string[] args)
{
Console.WriteLine("Please enter the unit code:");
string unitCode = Console.ReadLine();
Console.WriteLine("Please enter the unit number:");
string unitNumber = Console.ReadLine();
/* get the rest of your inputs */
AddStudentDetails(unitCode, unitNumber, firstName, lastName, studentMark);
}
// demonstrate auto-magically instantiated, mutable struct
void AddStudentDetails(string unitCode, string unitNumber, string firstName, string lastName, int studentMark)
{
students[indexer].unitCode = unitCode;
students[indexer].unitNumber = unitNumber;
students[indexer].firstName = firstName;
students[indexer].lastName = lastName;
students[indexer].studentMark = studentMark;
// increment your indexer
indexer++;
}
Примечание: обработка исключений в этом примере не рассматривается; например, увеличение за пределы массива.
В предыдущем примере вы могли изменить любое из свойств структуры StudentDetails
после создания экземпляра. Структуры сделаны более безопасными когда неизменяемые:
public struct StudentDetails
{
public readonly string unitCode; //eg CSC10208
public readonly string unitNumber; //unique identifier
public readonly string firstName; //first name
public readonly string lastName;// last or family name
public readonly int studentMark; //student mark
// use a public constructor to assign the values: required by 'readonly' field modifier
public StudentDetails(string UnitCode, string UnitNumber, string FirstName, string LastName, int StudentMark)
{
this.unitCode = UnitCode;
this.unitNumber = UnitNumber;
this.firstName = FirstName;
this.lastName = LastName;
this.studentMark = StudentMark;
}
}
Для этого необходимо изменить способ добавления объекта сведений в массив студентов:
void AddStudentDetails(string unitCode, string unitNumber, string firstName, string lastName, int studentMark)
{
students[indexer] = new StudentDetails(unitCode, unitNumber, firstName, lastName, studentMark);
// increment your indexer
indexer++;
}
Рассмотреть требования к структуре и дизайну надлежащим образом.