Home > OS >  How to properly access object's List<> value in C#?
How to properly access object's List<> value in C#?

Time:10-25

I am trying to get the object value but I don't know how to do it. I'm new to C# and its giving me syntax error. I want to print it separately via the method "PrintSample" How can I just concatenate or append the whatData variable . Thank you.

PrintSample(getData, "name");
PrintSample(getData, "phone");
PrintSample(getData, "address");


//Reading the CSV file and put it in the object
string[] lines = File.ReadAllLines("sampleData.csv");
            var list = new List<Sample>();
            foreach (var line in lines)
            {
                var values = line.Split(',');
                var sampleData = new Sample()
                {
                    name = values[0],
                    phone = values[1],
                    address = values[2]
                };
                list.Add(sampleData);

            }

 public class Sample
        {
            public string name { get; set; }
            public string phone { get; set; }
            public string adress { get; set; }
        }
//Method to call to print the Data
 private static void PrintSample(Sample getData, string whatData)
        {
            //THis is where I'm having error, how can I just append the whatData to the x.?
            Console.WriteLine( $"{getData.   whatData}"); 
            
        }

CodePudding user response:

I'm not sure what you are trying to achieve. Perhaps this will help you:

private static void PrintSample(Sample getData, string whatData)
{
    var property = getData.GetType().GetProperty(whatData);
    string value = (string)property?.GetValue(getData) ?? "";
    Console.WriteLine($"{value}");
}

CodePudding user response:

What PO really needs is

private static void PrintSamples(List<Sample> samples)
{
foreach (var sample in samples)
Console.WriteLine($"name : {sample.name} phone: {sample.phone} address: {sample.address} ");
}

and code

 var list = new List<Sample>();
 foreach (var line in lines)
   {
     ......
     }
   PrintSamples(list);

it is radicolous to use

PrintSample(getData, "name");

instead of just

PrintSample(getData.name)

CodePudding user response:

In C# it's not possible to dynamically evaluate expression like

$"{getData.   whatData}"

As opposed to languages like JavaScript.

I'd suggest to use rather switch expression or Dictionary<string, string>

public void PrintData(Sample sample, string whatData)
{
    var data = whatData switch
    {
        "name" => sample.name,
        "phone" => sample.phone,
        "address" => sample.address
        _ => throw new ArgumentOutOfRangeException(nameof(whatData)),
    };
   Console.WriteLine(data);
}

CodePudding user response:

You can do this using reflection. However, it's known to be relatively slow.

public static void PrintSample(object getData, string whatData)
{
    Console.WriteLine( $"{getData.GetType().GetProperty(whatData).GetValue(getData, null)}");
}
  •  Tags:  
  • c#
  • Related