Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat mengambil nama harta benda dari ekspresi Lambda di C#?

Bagaimanakah saya dapat mengambil nama harta benda dari ekspresi Lambda di C#?

Barbara Streisand
Barbara Streisandasal
2025-02-01 05:51:09767semak imbas

How Can I Efficiently Retrieve Property Names from Lambda Expressions in C#?

Memperolehi nama atribut dengan berkesan dari ekspresi lambda

Dalam C#, nama nama atribut penghantaran ekspresi lambda biasanya rumit, terutamanya apabila atribut diwakili oleh rentetan. Penyelesaian yang sama adalah untuk menukar ungkapan lambda ke dalam ungkapan ahli, tetapi ini hanya terpakai kepada atribut rentetan.

pelan penambahbaikan

Untuk mengatasi batasan kaedah yang sedia ada, kami mencadangkan satu kaedah yang sama yang mengembalikan objek ekspresi yang ditentukan. Jika ungkapan tidak mewakili atribut, ia dibuang dari pengecualian.

PropertyInfo Kaedah ini menggunakan parameter untuk kesimpulan jenis, dan menerima bentuk

ekspresi lambda.
<code class="language-csharp">public static PropertyInfo GetPropertyInfo<TSource, TProperty>(
    TSource source,
    Expression<Func<TSource, TProperty>> propertyLambda)
{
    if (propertyLambda.Body is not MemberExpression member)
    {
        throw new ArgumentException(string.Format(
            "表达式 '{0}' 指向方法,而非属性。",
            propertyLambda.ToString()));
    }

    if (member.Member is not PropertyInfo propInfo)
    {
        throw new ArgumentException(string.Format(
            "表达式 '{0}' 指向字段,而非属性。",
            propertyLambda.ToString()));
    }

    Type type = typeof(TSource);
    if (propInfo.ReflectedType != null && type != propInfo.ReflectedType && !type.IsSubclassOf(propInfo.ReflectedType))
    {
        throw new ArgumentException(string.Format(
            "表达式 '{0}' 指向的属性不属于类型 {1}。",
            propertyLambda.ToString(),
            type));
    }

    return propInfo;
}</code>
Contoh sebenar

source Expression<Func<TSource, TProperty>> Contoh berikut menunjukkan penggunaan kaedah penambahbaikan ini:

Kaedah ini menyediakan cara yang lebih mantap dan umum untuk mengekstrak maklumat atribut dari ekspresi Lambda.

Atas ialah kandungan terperinci Bagaimanakah saya dapat mengambil nama harta benda dari ekspresi Lambda di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn