考慮下面的語句:調用,在C#中使用了表達式和代表在其參數的擴展方法
recorder.AddActivity(new Activity { ActivityName = "DeepSeaDiving", DayOfWeek = DayOfWeek.Monday });
取而代之的是,有一個帖子here,用Expression Trees
花式呼是這樣的:
WeeklyActivityRecorder weeklyActivities = new WeeklyActivityRecorder() .WithActivities(Monday => "Lawn Moving",Tuesday => "Cooking");
我看到了擴展方法here,它在下面給出。
public static WeeklyActivityRecorder WithActivities(this WeeklyActivityRecorder recorder, params Expression<Func<DayOfWeek, string>>[] activityList)
{
foreach (var activity in activityList)
{
LambdaExpression expression = activity;
ConstantExpression enteredActivity = expression.Body as ConstantExpression;
DayOfWeek day = expression.Parameters[0];
recorder.AddActivity(new Activity{DayOfWeek = day, ActivityName = activity});
}
return recorder;
}
但是,當我編譯,編譯器是不滿意的擴展方法,並抱怨說,'不能sourceType的ParameterExpression轉換爲DAYOFWEEK。
任何想法我在這裏失蹤?
局部變量做你不能使用相同的參數名稱。在lambda中''day'你聲明參數名稱,它應該是不同的。 –
[在C#中使用表達式作爲其參數之一調用擴展方法]的可能重複(http://stackoverflow.com/questions/19490247/invoking-an-extension-method-with-an-expression-as-one -of-its-parameter-in-c-sha) –