Wie kann ich den Wert einer Eigenschaft erhalten, die ein String-Argument gegeben.Wie Wert der Eigenschaft in Abhängigkeit von einem Argument gelesen wird
Ich habe ein Objekt CsvProvider.Row
, das die Attribute a, b, c hat. Ich möchte den Attributwert abhängig von der Eigenschaft als String-Argument erhalten. Ich habe versucht, so etwas wie diese:
let getValue (tuple, name: string) =
snd tuple |> Seq.averageBy (fun (y: CsvProvider<"s.csv">.Row) -> y.```name```)
aber es gibt mir die folgende Fehlermeldung:
getValue(tuple, "a")
und es sollte gleichwertig sein:
Unexpected reserved keyword in lambda expression. Expected incomplete structured construct at or before this point or other token.
Einfacher Aufruf Funktion soll wie folgt aussehen zur folgenden Funktion:
let getValue (tuple) =
snd tuple |> Seq.averageBy (fun (y: CsvProvider<"s.csv">.Row) -> y.a)
Ist so etwas überhaupt möglich?
Danke für jede Hilfe!
Sie brauchen Reflexion dafür - aber warum verwenden Sie nicht einen Getter anstelle des Namens? 'lass getValue (ts, getter: CsvProvider <"s.csv"> .Row -> 'a) = ...' – Carsten
@Carsten yup ich könnte, aber ich dachte, dass ich es so machen kann, denn für mich wird es ein ziemlich besser aussehen . Also nehme ich an, ich sollte etwas schreiben wie Sie vorschlagen oder lassen getValue (Tupel, name: string) = snd Tupel |> Seq.averageBy (fun y -> typedefof .Row> .GetField (name). GetValue():?> Float) –
MNie
es liegt an dir, aber die Wahl gegeben * I * würde nie magische Zeichenfolgen oder Reflexion verwenden, wenn ich Compiler überprüfen Ausdrücke haben kann – Carsten