1

F# の初心者として、私は定期的に学習課題として C# のビットを変換しようとしています。この場合、次の C# 式の解析コードを変換しようとしています。シンプルです。アイデアは、標準のリフレクション手法を使用するのではなく、ラムダをこの関数に渡してプロパティ名の文字列表現を取得することです。他の GetMemberName 関数は省略しました。これは、取るべきアプローチについて何らかのガイダンスが得られれば理解できると思うからです。

public static string GetMemberName<T>(Expression<Func<T, object>> expression)
{
    if (expression == null)
    {
        throw new ArgumentException("The expression cannot be null.");
    }
    return GetMemberName(expression.Body);
}

F# には引用符があることを知っています。また、F# で Linq 式を使用できることも知っています。最初に引用符を使用して F# の方法で試してみたいのですが、つまずいています。誰かが私にキックスタートを与えることができますか?

4

1 に答える 1

3

引用は C# の式とは形が異なるため、引用を使用してこれを正確に翻訳できるかどうかはわかりません。ただし、同じ行に沿ったものを次に示します。

open Microsoft.FSharp.Quotations.Patterns

let GetMemberName = function
    | Call (_,methodInfo,_) -> methodInfo.Name
    | PropertyGet (_,propertyInfo,_) -> propertyInfo.Name
    | _ -> failwith "Not a member expression"

GetMemberName <@ [].IsEmpty @>
// val it : string = "IsEmpty"
于 2014-11-11T15:12:54.823 に答える