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
Lepaskan: 2025-02-01 05:51:09
asal
783 orang telah melayarinya

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.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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;

}

Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan