yöntemimin imzaLimiti basit özelliğine Lambda deyimi
void Sample<TData>(Expression<Func<TData,TValue>> expression) { }
Ben izin vermek istediğiniz gibi aramaları: denedim
Sample <MyData>(m => m.SomeProperty);
Ama
Sample<MyData>(m => m.ComplexProperty.AnotherProperty);
iç içe geçmiş bedenlerin sayısını sayın ve ifadeyi yuvalama sayısı 1 olanlarla sınırlayın, ancak 'SomeProperty' bir temel c'den türetildiğinde bu başarısız olur. lass.
private static int ItemCount(Expression lambaExpression)
{
int itemCount = 0;
var member = lambaExpression as MemberExpression;
while (member != null)
{
itemCount += 1;
member = member.Expression as MemberExpression;
}
return itemCount;
}
Sorum şu: Nasıl 'foo.bar' ve 'Foo.Bar.Bar' ayırt edersiniz? Buna benzer
Bu, İfade ile tamamen ilgili olsa bile. Bir geliştiriciden ve kullanıcı açısından bakıldığında bunun böyle olduğundan şüpheleniyor. Her şey olabilir bir İfadeyi kabul eden bir işlev sağlarsınız ve bu da bir geliştirici olarak beklediğim ve daha sonra onu sınırlandıracağınız sözcükler. Bu işlevin kullanıcıları sınırlı olduklarını öğrenmek için ekstra bir sınıf yazmayı öneririm – ckruczek
@ckruczek Bu gibi bir sınırlama akıcı arayüzlerde oldukça yaygındır (evet, fark ettiğinizde oldukça çirkin olur :-)) – xanatos
@ckruczek: Örnek bir çerçeve yazıyorum ve kullanıcıları Demeter Yasasını takip etmeye teşvik etmek istiyorum. – alzaimar