ল্যাম্বডা এক্সপ্রেশন দিয়ে যাওয়ার পরে সম্পত্তিটির নাম পাওয়ার কী আরও ভাল উপায় আছে? আমার কাছে বর্তমানে যা আছে তা এখানে।
যেমন।
GetSortingInfo<User>(u => u.UserId);
এটি কেবলমাত্র সম্পত্তিটির স্ট্রিং হয়ে গেলে এটিকে একটি মেম্বের এক্সপ্রেশন হিসাবে কাস্ট করে কাজ করেছিল। কারণ সমস্ত বৈশিষ্ট্যগুলি স্ট্রিং নয় যা আমাকে অবজেক্টটি ব্যবহার করতে হয়েছিল তবে তারপরে এটি তাদের জন্য একটি অ্যাক্রেইক্সেপশন ফিরিয়ে আনবে।
public static RouteValueDictionary GetInfo<T>(this HtmlHelper html,
Expression<Func<T, object>> action) where T : class
{
var expression = GetMemberInfo(action);
string name = expression.Member.Name;
return GetInfo(html, name);
}
private static MemberExpression GetMemberInfo(Expression method)
{
LambdaExpression lambda = method as LambdaExpression;
if (lambda == null)
throw new ArgumentNullException("method");
MemberExpression memberExpr = null;
if (lambda.Body.NodeType == ExpressionType.Convert)
{
memberExpr =
((UnaryExpression)lambda.Body).Operand as MemberExpression;
}
else if (lambda.Body.NodeType == ExpressionType.MemberAccess)
{
memberExpr = lambda.Body as MemberExpression;
}
if (memberExpr == null)
throw new ArgumentException("method");
return memberExpr;
}
MemberExpression
কেবলমাত্র নামটির জন্য এখানে তালিকাবদ্ধ পদ্ধতির ব্যবহার করুন , প্রকৃত নামটি না পাওয়ার জন্য MemberInfo
, কারণ MemberInfo
প্রত্যাবর্তিত কিছু নির্দিষ্ট "ডারভেড: বেস" দৃশ্যে প্রতিফলিত ধরণের হওয়ার নিশ্চয়তা নেই। দেখুন ল্যামডা প্রকাশ নয়-ফিরে-এর প্রত্যাশিত-memberinfo । একবার আমাকে ফাঁদে ফেলেছে। গৃহীত উত্তরও এ থেকে ভোগে।