ল্যাম্বডা থেকে এক্সপ্রেশনে যাওয়া কোনও পদ্ধতি কল ব্যবহার করা সহজ ...
public void GimmeExpression(Expression<Func<T>> expression)
{
((MemberExpression)expression.Body).Member.Name; // "DoStuff"
}
public void SomewhereElse()
{
GimmeExpression(() => thing.DoStuff());
}
তবে আমি ফানককে একটি অভিব্যক্তিতে পরিণত করতে চাই, কেবল বিরল ক্ষেত্রেই ...
public void ContainTheDanger(Func<T> dangerousCall)
{
try
{
dangerousCall();
}
catch (Exception e)
{
// This next line does not work...
Expression<Func<T>> DangerousExpression = dangerousCall;
var nameOfDanger =
((MemberExpression)dangerousCall.Body).Member.Name;
throw new DangerContainer(
"Danger manifested while " + nameOfDanger, e);
}
}
public void SomewhereElse()
{
ContainTheDanger(() => thing.CrossTheStreams());
}
যে লাইনটি কাজ করে না তা আমাকে সংকলন-সময় ত্রুটি দেয় Cannot implicitly convert type 'System.Func<T>' to 'System.Linq.Expressions.Expression<System.Func<T>>'
। একটি সুস্পষ্ট কাস্ট পরিস্থিতি সমাধান করে না। এটি করার কোনও সুবিধা কি আমি অবহেলিত করছি?
at lambda_method(Closure )
সংকলিত প্রতিনিধিদের অনুরোধের মতো কিছু দেখায় ।