Индексатор не облегчит сравнение данных. Я подозреваю, что real вопрос в том, как обрабатывать данные в C# так же, как работают Python DataFrames. ADO. NET предоставляет класс DataTable начиная с. NET 1.0. Он предназначен больше для обработки базы данных, чем для анализа данных, хотя он поддерживает такие операции, как поиск, слияние и разложение.
Для анализа данных новый пакет Microsoft.Data.Analysis предоставляет класс DataFrame .
При этом для чтения свойств по имени вам придется использовать Отражение, дорогая операция. Один из способов сделать это дешевле - кэшировать дескрипторы типов и свойств. Вместо того, чтобы писать код самостоятельно, вы можете использовать библиотеку Mar c Gravel FastMember , которая делает именно это. При этом вы можете создать тип TypeAccessor или ObjectAccessor и читать свойства по имени, например:
var wrapped = ObjectAccessor.Create(obj);
string propName = // something known only at runtime
Console.WriteLine(wrapped[propName]);
Если вы хотите читать из нескольких объектов, вам понадобится TypeAccessor:
var accessor = TypeAccessor.Create(type);
string propName = // something known only at runtime
while( /* some loop of data */ )
{
accessor[obj, propName] = rowValue;
}
Библиотека не такая большая. Если вам не разрешено использовать пакеты NuGet, вы можете скопировать код в свой проект.