CallMeTrebor
CallMeTrebor

Reputation: 47

How would I make a string get a property? C#

I got this database witch would display the grade of a student based on what I would write in the code. For example:

id = "Robert"
classType = "mathGrades"

And here is my code

public string grades;

public string loadQuery(string id, string classType)
{
    students = jsonService.GetData(); // My Json reader gets data from my Json file
    string Class = "student." + classType; //I combine the scripts

    foreach (Student student in students)
    {
        if (student.name == id)//Check if we have a student by this name, if we do then get the grades for the class defined in "classType"  
        {
            grades = string.Join(", ", Class);//This is the part that I understand why it doesn't work, but I don't have an idea on how to replace it
        }
    }
    return grades;
}

This is the Student class:

public class Student
{
    public string name { get; set; }

    public List<int> mathGrades { get; set; }

    public override string ToString() => JsonSerializer.Serialize(this);
}

And this is the json file containing the data

 [
      {
        "name": "Test1",
        "mathGrades": [ 1, 2, 3 ]
      },
    
      {
        "name": "Test2",
        "mathGrades": [ 1, 2, 3 ]
      }
]

I would want my output to be something like "1, 2, 3" but I just get student.mathGrades. Which I understand why, I just don't know how to fix it. Thanks in advance !

Upvotes: 1

Views: 109

Answers (2)

Max
Max

Reputation: 1090

You should change

 grades = string.Join(", ", Class);

to

grades = string.Join(", ", student.mathGrades);

The above answer explained your mistake. String.Join expects array of values. In your example

string.Join(", ", "student.mathGrades");

returns student.mathGrades

Upvotes: 1

Todd Skelton
Todd Skelton

Reputation: 7239

You are creating a string named Class and setting it equal to "student.mathGrades".

In your loop, you are effectively saying grades = string.Join(", ", "student.mathGrades")

Since "student.mathGrades" is just a single string, there is no joining and it's just returned.

If you want to have grades return a list of grades you need to pull that list from somewhere. It would help to know what your student object looks like.

Upvotes: 0

Related Questions