C# 从其他函数调用属性时,当前上下文中不存在变量

C# 从其他函数调用属性时,当前上下文中不存在变量,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个函数中存在的以下模型。其中一个属性正在调用另一个函数,但我得到的变量不在范围内。月底,日底 所有这些背后的逻辑是使用EndOn properties的部分日期填充serviceYear。 我确实理解这个错误,只是不知道如何解决这个问题 public ProgramSchedule GetProgramScheduleEditViewModel() { var newModel = new ProgramSchedule(customerProgram.RepeatBy) {

我有一个函数中存在的以下模型。其中一个属性正在调用另一个函数,但我得到的变量不在范围内。月底,日底

所有这些背后的逻辑是使用EndOn properties的部分日期填充serviceYear。 我确实理解这个错误,只是不知道如何解决这个问题

public ProgramSchedule GetProgramScheduleEditViewModel()
 {
 var newModel = new ProgramSchedule(customerProgram.RepeatBy)
   {
     EndOn = Value;
     ServiceYear = GetServiceYearWithDefault(),
    };
        return newModel;
  }

public DateTime GetServiceYearWithDefault()
 {
  int defaultYear = ((short?)GetParameterValue(ParameterConfiguration.GeneralParameterKeys.Year)) ?? 
  (int)DateTime.Now.Year;
  //End.Month and End.Now.Day is where the variable is out of scope
  DateTime Final = new DateTime(defaultYear, EndOn.Month, EndOn.Day);
  return Final;
  }

我不会说谎:你的逻辑在我看来很复杂。可以解决您的问题但会使问题更加复杂的是接受DateTime作为GetServiceYearWithDefault的参数,如下所示:

    public DateTime GetServiceYearWithDefault (DateTime endOn)
    {
        int defaultYear = ((short?)GetParameterValue(
            ParameterConfiguration.GeneralParameterKeys.Year)
        ) ?? (int) DateTime.Now.Year;

        DateTime Final = new DateTime(defaultYear, endOn.Month,
            endOn.Day);
        return Final;
    }
现在更改第一个方法,将EndOn作为DateTime参数传递给GetProgramScheduleEditViewModel:


是结束了,一个月又一个月,现在是大邑还是结束了,一个月又一个月,现在是天?是的,也许你指的是结束了,一个月而不是结束了。我们也看不到GetProgramScheduleEditViewModel中的值来自何处。请查看指南并相应发布。现在还不清楚为什么基于代码,你希望End神奇地出现在任何地方,甚至EndOn,如果你想写的是EndOn,我总是想知道为什么OPs会发布无法编译的代码。EndOn=值;既有价值又有价值;,End.Now.Day可能是End.Day、GetServiceYearWithDefault、逗号等。。实现这一点不需要额外的努力吗?复制和粘贴不是更容易吗?哦,有了EndOn和EndOn.Day,但是EndOn=Value;仍然存在。
    public ProgramSchedule GetProgramScheduleEditViewModel ()
    {
        var newModel = new ProgramSchedule(customerProgram.RepeatBy)
        {
            EndOn = Value;
            ServiceYear = GetServiceYearWithDefault(EndOn);
        };
        return newModel;
    }