Neden bazı nesne özellikleri UnaryExpression ve diğerleri MemberExpression?
Benim için cevap hareket Select a model property using a lambda and not a string property name aşağıdaki gibi bir toplama için özellikler eklemek isteyen soru
var props = new ExportPropertyInfoCollection<JobCard>();
props.Include(model => model.BusinessInstallNumber).Title("Install No").Width(64).KeepZeroPadding(true);
props.Include(model => model.DeviceName).Title("Device").Width(70);
props.Include(model => model.DateRequested).Title("Request Date").Format("{0:dd/MM/yyyy}").Width(83);
Include
yöntemi aşağıdaki kodu yazdım:
public class PropertyCollection<T>
{
public void Include(Expression<Func<T, object>> expression)
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
var pes = new ExportPropertyInfoBuilder {Property = new ExportPropertyInfo {Property = memberExpression.Member as PropertyInfo}};
Properties.Add(pes.Property.Property.Name, pes.Property);
return pes;
}
Bununla birlikte, kodu çalıştıran, Lambda bazı vermiştir buldumMemberExpressionbeklendiği gibi değerler, ama diğerleri vermiştirUnaryExpressiondeğerler. Tüm özellikleri Lambda kullanarak ekleyebilirim önce aşağıdaki kodun ilk satırı değiştirmek zorunda kaldım:
var memberExpression = expression.Body as MemberExpression ?? ((UnaryExpression) expression.Body).Operand as MemberExpression;
Tüm özelliklerini 'basit' tür, yani string, DateTime, int, bool, vb vardır. POCO iş bir nesne. Birkaç değişik ile dekore edilmiştirEğlence devri açmıştıröznitelikleri.
Ne benim örnekte Lambda bazı verim neden olurMemberExpressiondeğerler ve diğerleriUnaryExpressiondeğerleri? Benim örnekte, ilkUnaryExpressionüçüncü satırda iseDateTimeözellik, ama Boole özellikleri de neden olurUnaryExpressions.
CEVAP
Sorunun ne olduğunu biliyorum sanırım. İfade döner tip object
.
Eğer bu 9 ** değiştirirseniz dönüş türü doğru çıkarılmamalıdır, ve UnaryExpression
bazı boks operasyon olduğunu varsayıyorum) ortaya çıkmaz.
Güncelleme:
Include
imza: olmalıdır
public void Include<T, R>(Expression<Func<T, R>> expression)
Neden diğerleri üzerinde bazı platform...
Python, neden bir işlevi arayan, ama d...
Neden nesne yerine bir işaretçi kendis...
Neden ve'boş ve tanımsız arasında...
Nasıl verimli bir şekilde anahtarları/...