Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat mengambil nama harta benda dari ekspresi Lambda di C#?
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
<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!