6
The best thing would be to create indexers so that you can easily access the properties using index, this is what indexers are made for.
public class class1
{
public string ADR_HOME;
public string ADR_PREF_HOME;
public string TEL_WORK;
public string TEL_WORK_PREF;
public string VERSION;
// Indexer
public string this[int index]
{
get
{
switch (index)
{
case 0: return ADR_HOME;
case 1: return ADR_PREF_HOME;
case 2: return TEL_WORK;
case 3: return TEL_WORK_PREF;
case 4: return VERSION;
default: throw new IndexOutOfRangeException();
}
}
set
{
switch (index)
{
case 0: ADR_HOME = value; break;
case 1: ADR_PREF_HOME = value; break;
case 2: TEL_WORK = value; break;
case 3: TEL_WORK_PREF = value; break;
case 4: VERSION = value; break;
default: throw new IndexOutOfRangeException();
}
}
}
}
//use it like shown below
List<class1> lst1 = new List<class1>();
// Accessing using an index
string s1 = lst1[anIndex][1];
4
public class class1
{
public string ADR_HOME { get; set; }
public string ADR_PREF_HOME { get; set; }
public string TEL_WORK { get; set; }
public string TEL_WORK_PREF { get; set; }
public string VERSION { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<class1> lst1 = new List<class1>
{
new class1 { ADR_HOME = "Home1", ADR_PREF_HOME = "PrefHome1", TEL_WORK = "Work1", TEL_WORK_PREF = "WorkPref1", VERSION = "V1" },
new class1 { ADR_HOME = "Address 1", ADR_PREF_HOME = "Preferred Address 1", TEL_WORK = "Work1", TEL_WORK_PREF = "WorkPref1", VERSION = "V1" },
new class1 { ADR_HOME = "Address 2", ADR_PREF_HOME = "Preferred Address 2", TEL_WORK = "Work1", TEL_WORK_PREF = "WorkPref1", VERSION = "V1" }
};
int index = 1; // Replace this with your desired index
int elementIndex = 0;
string elementValue = GetPropertyValueByIndex(lst1[index], elementIndex);
string elementName = GetPropertyNameByIndex< class1>(elementIndex);
Console.WriteLine("Name: " + elementName);
Console.WriteLine("Value: " + elementValue);
}
static string GetPropertyValueByIndex<T>(T obj, int index)
{
var properties = typeof(T).GetProperties();
var property = properties[index];
return property.GetValue(obj).ToString();
}
static string GetPropertyNameByIndex<T>(int index)
{
var properties = typeof(T).GetProperties();
var property = properties[index];
return property.Name;
}
}

3
class class1
{
public string ADR_HOME;
public string ADR_PREF_HOME;
public string TEL_WORK;
public string TEL_WORK_PREF;
public string VERSION;
}
List<class1> lst1 = new List<class1>();
// Add some elements to the list
lst1.Add(new class1 { ADR_HOME = "Home1", ADR_PREF_HOME = "PrefHome1", TEL_WORK = "Work1", TEL_WORK_PREF = "WorkPref1", VERSION = "1.0" });
lst1.Add(new class1 { ADR_HOME = "Home2", ADR_PREF_HOME = "PrefHome2", TEL_WORK = "Work2", TEL_WORK_PREF = "WorkPref2", VERSION = "2.0" });
// Reference an element by index
int indexToReference = 0;
class1 referencedElement = lst1[indexToReference];
// Now you can access the properties of the referenced element
string adrHome = referencedElement.ADR_HOME;
string telWork = referencedElement.TEL_WORK;
// Do something with the properties...
3
In C#, you can’t directly reference a class’s properties by index. However, you can use reflection to achieve this. Here’s an example of how you can do it:
public class Class1
{
public string ADR_HOME;
public string ADR_PREF_HOME;
public string TEL_WORK;
public string TEL_WORK_PREF;
public string VERSION;
}
List<Class1> lst1 = new List<Class1>();
// Add some data to lst1
lst1.Add(new Class1 { ADR_HOME = "Home1", ADR_PREF_HOME = "PrefHome1", TEL_WORK = "Work1", TEL_WORK_PREF = "WorkPref1", VERSION = "V1" });
int anIndex = 0; // Index of the element in the list
int propertyIndex = 0; // Index of the property in the class
// Get the property by index
var property = typeof(Class1).GetProperties()[propertyIndex];
// Get the value of the property
string s1 = (string)property.GetValue(lst1[anIndex]);
// Get the name of the property
string elementName = property.Name;
In this code, s1
will contain the value of the property at propertyIndex
for the element at anIndex
in lst1
, and elementName
will contain the name of that property1.
Please note that this code assumes that the properties in Class1
are public and have getters. If the properties are private or protected, or if they don’t have getters, you’ll need to use different methods to get their values. Also, this code doesn’t handle any exceptions that might be thrown if anIndex
or propertyIndex
are out of range, or if the property’s getter throws an exception. You might want to add some error checking code to handle these cases.
Also, please note that the order of the properties returned by GetProperties()
is not guaranteed to be the same as the order in which they’re declared in the class2. If you need to access the properties in a specific order, you might need to use a different approach, such as declaring an array or list of property names and indexing into that.
Thanks

3
Hello Robert,
You can access class reference data as below by Index,
List<class1> lst1 = new List<class1>();
lst1.Add(new class1() { ADR_HOME = "ADR_HOME_INDEX_0", ADR_PREF_HOME = "ADR_PREF_HOME_INDEX_0" });
lst1.Add(new class1() { ADR_HOME = "ADR_HOME_INDEX_1", ADR_PREF_HOME = "ADR_PREF_HOME_INDEX_1" });
lst1.Add(new class1() { ADR_HOME = "ADR_HOME_INDEX_2", ADR_PREF_HOME = "ADR_PREF_HOME_INDEX_2" });
lst1.Add(new class1() { ADR_HOME = "ADR_HOME_INDEX_3", ADR_PREF_HOME = "ADR_PREF_HOME_INDEX_3" });
var index_2 = lst1[2].ADR_HOME;
var index_2 = lst1[2].ADR_HOME; This line lst1[2] represent 2nd element of list. [2] you can pass as parameter so you can access by index of list. In above example it will return value "ADR_HOME_INDEX_2"
if you wish to access first element of list then you can use lst1[0] which will return "ADR_HOME_INDEX_0"
2
To reference a class element by index in C#, you can use reflection to dynamically access the properties of the class. Here's how you can achieve this:
using System;
using System.Reflection;
public class class1
{
public string ADR_HOME;
public string ADR_PREF_HOME;
public string TEL_WORK;
public string TEL_WORK_PREF;
public string VERSION;
}
List<class1> lst1 = new List<class1>();
// Accessing element by index
string s1 = lst1[anIndex].GetType().GetProperties()[1].GetValue(lst1[anIndex]).ToString();
// Retrieving the name associated with the element
string elementName = lst1[anIndex].GetType().GetProperties()[1].Name;
In the code above, GetType()
is used to get the type of the object at the specified index. GetProperties()
returns an array of PropertyInfo
objects representing the properties of the class. By specifying the index of the desired property (in this case, 1), you can access the property value using GetValue()
. To retrieve the name associated with the element, you can use Name
property of the PropertyInfo
object.

2
using System;
using System.Reflection;
using System.Collections.Generic;
public class class1
{
public string ADR_HOME;
public string ADR_PREF_HOME;
public string TEL_WORK;
public string TEL_WORK_PREF;
public string VERSION;
}
class Program
{
static void Main(string[] args)
{
List<class1> lst1 = new List<class1>();
lst1.Add(new class1() { ADR_HOME = "123 Main St", ADR_PREF_HOME = "456 Secondary St", TEL_WORK = "999-888-7777", TEL_WORK_PREF = "111-222-3333", VERSION = "1.0" });
int anIndex = 0; // The index you want to access
int propertyIndex = 0; // The index of the property you want to access
// Accessing the property by index using reflection
PropertyInfo[] properties = typeof(class1).GetProperties();
object value = properties[propertyIndex].GetValue(lst1[anIndex]);
// Getting the name associated with the accessed property
string propertyName = properties[propertyIndex].Name;
// Displaying the retrieved value and property name
Console.WriteLine("Value: " + value); // Value: 123 Main St
Console.WriteLine("Property Name: " + propertyName); // Property Name: ADR_HOME
}
}
