C#属性会失去它的价值吗

  • 本文关键字:属性 失去 c#
  • 更新时间 :
  • 英文 :


我正面临一个带有C#属性的奇怪行为。我有一个类叫WorkDay,它有一个属性叫WorkingTime:

class WorkDay : INotifyPropertyChanged
{
public Time WorkingTime { get; private set; } = new Time();
public delegate void WorkingTimeChanged();
public WorkingTimeChanged OnWorkingTimeChanged { get; set; }
// This function is called when some other properties changed in that same class.
private void ComputeWorkingTime()
{
if ( ... )
{
WorkingTime = ...;
NotifyPropertyChanged("WorkingTime");
OnWorkingTimeChanged?.Invoke();
}
}
}

在另一个名为WorkWeek的类中,我有一个WorkDay的列表,它是由一个称为AddWorkDay:的方法修改的

class WorkWeek
{
private List<WorkDay> _workDays = new List<WorkDay>();
public void AddWorkDay(ref WorkDay workDay)
{
workDay.OnWorkingTimeChanged += WorkDay_OnWorkingTimeChanged;
_workDays.Add(workDay);
}
private void WorkDay_OnWorkingTimeChanged()
{
foreach (var workDay in _workDays)
{
_actualWorkingTime += workDay.WorkingTime;
}
}
}

问题是,当调用WorkDay_OnWorkingTimeChanged方法时,WorkingTime属性会丢失其值(该值在相应的WorkDay对象中仍然正确(。我不知道我错在哪里了。非常感谢你的帮助。

我认为这是因为您正在将WorkingTime初始化为新时间。

这应该按原样工作-

public Time WorkingTime{get;set;}

WorkDay_OnWorkingTimeChanged返回为无效,它没有返回任何内容。

你的应用程序正在编译吗?因为你错过了相同方法上的((

事实上,问题发生在WorkDay_OnWorkingTimeChanged中,但我的代码不够完整,无法帮助您找到解决方案:

private void WorkDay_OnWorkingTimeChanged()
{
if (_actualWorkingTime.IsSet())
{
_actualWorkingTime.Unset();
}
foreach (var workDay in _workDays)
{
if (workDay.WorkingTime.IsSet())
{
if (!_actualWorkingTime.IsSet())
{
_actualWorkingTime = workDay.WorkingTime;
}
else
{
_actualWorkingTime += workDay.WorkingTime;
}
}
}
}

因此,当我执行_actualWorkingTime = workDay.WorkingTime时,我似乎通过引用将workDay.WorkingTime属性传递给_actualWorkingTime属性。这就是为什么稍后在修改_actualWorkingTime属性时可以更改workDay.WorkingTime属性的原因。

最新更新