В качестве учебного упражнения я провожу анализ данных в CSV-файле из 5000 строк, используя F# и функции поставщика типов F#. Когда я использую тип, созданный поставщиком типа, в f#, естественно, строки заголовка CSV-файла становятся именами полей типа.
Код: Выделить всё
type restaurantCsv = CsvProvider
type RawInspectionData(filename : string) =
member this.allData = restaurantCsv.Load(filename)
member public this.inspectionsList = this.allData.Data.ToList()
member this.FilterByName(name : string) =
this.allData.Data
|> Seq.filter (fun x -> x.EstablishmentName.Contains(name))
Кроме того, я вызываю код F# (в библиотеке, которую создает приведенный выше код) из файла C# модульного тестирования. Он работает нормально. Но когда я использую IEnumerable, который F# возвращает из FilterByName, информация об имени поля не сохраняется. Итак, у меня есть код, который сопоставляет новые имена полей с .Item1, Item2 и т. д. из кортежа:
Код: Выделить всё
var inspectionsOnCafes = inspections2013.FilterByName("Cafe");
var inspections = (from row in inspectionsOnCafes
select new
{
inspectorID = row.Item3,
restaurantName = row.Item5,
inspectionDate = row.Rest.Item6
}).ToList();
Мой вопрос: есть ли способ заставить C# распознавать имена полей в типе, сгенерированном F#, чтобы мне не приходилось сопоставлять row.Item # в легко читаемое имя поля?
Другими словами, есть ли способ использовать такой код:
Примечание. Я рассмотрел вопрос «Как создать поставщика типов F#, который можно использовать из C#?» но вопрос Кэмерона Таггерта и ответ Томаса Петричека, мне кажется, касаются несколько разных аспектов поставщиков типов. Даже если они точны, я этого не понимаю, поэтому мне все равно нужна дополнительная помощь.
Подробнее здесь:
https://stackoverflow.com/questions/219 ... c-boundary