【问题标题】:C# - Store and then update a propertyC# - 存储然后更新属性
【发布时间】:2009-02-16 21:52:42
【问题描述】:

晚上好,

我编写了一个需要执行更新的传输应用程序,然后更新与该更新对应的日期。即

string content = string.Empty;
IIvdManager manager;
DateTime configDate;

if (table == Tables.Asset)
{
    content = WebService.GetTblAsset(companyId);
    manager = ivdData.Instance.Asset;
    configDate = ivdConfig.LAST_UPDATE_ASSET;
}
else if (table == Tables.Site)
{
    content = WebService.GetTblSite(companyId);
    manager = ivdData.Instance.Site;
    configDate = ivdConfig.LAST_UPDATE_SITE;
}
else if (table...)
{
    ...
}

if (content.Length > 0)
{
    if (UpdateManager(manager, content))
    {
        configDate = DateTime.Now;
    }

}

我想要的是 configDate 属性在我的 ivdConfig 静态类中更新相应的 Date Get/Set。

我该怎么做?

【问题讨论】:

  • 我在这里有点困惑...... configDate 不是一个属性。它似乎是一个局部变量。
  • 是的,它是 - 我知道它不起作用,但是我需要一种方法让它能够更新其他静态 ivdConfig 类中的日期
  • 很抱歉,不,configDate 不是上面代码中的 C# 属性。根据它所在的位置,它要么是字段,要么是局部变量,但它不是属性(属性有 get 和/或 set)
  • ivdConfig 项是属性(带有 get/set),我知道 configDate 不是属性,只是一种类型,但是我在问如何从我的 ivdConfig 类中以某种方式存储属性然后在最后更新它。

标签: compact-framework .net-2.0 properties c#-2.0


【解决方案1】:

你考虑过状态模式吗?

子类化您的表(表变量)并添加一个虚拟方法(也许是 Update()?),然后在每个特定的表类型中覆盖该方法。这将完全删除 else ifs,因为它会变成:

table.Update();

将您需要的任何对象传递给此调用,然后从表中取回值(因为它可以在 Update() 的实现中更新自己的特定日期属性)。

如果我说错了话,我深表歉意,但我不能 100% 确定你要说实话。

【讨论】:

    【解决方案2】:

    不是我认为这是好的代码,而是您正在寻找的代码吗?

    private DateTime configDate;
    
    private DateTime ConfigDate
    {
      get { return configDate; }
      set 
      {
        configDate = value;
        ivdConfig.TheDate = value;
      }
    } 
    

    【讨论】:

      【解决方案3】:

      这听起来很简单,您需要这样做:

      manager.Date = configDate;
      

      这意味着我几乎肯定是错的......

      【讨论】:

        【解决方案4】:

        DateTime 类型是值类型,因此上面的代码只会将 ivdConfig.LAST_UPDATE_SITE 的值复制到 dateToUpdate 而不是对的引用。

        要解决您的问题,您可以执行以下操作:

        if (table == Tables.Asset)
        {
            content = WebService.GetTblAsset(companyId);
            manager = ivdData.Instance.Asset;
        }
        else if (table == Tables.Site)
        {
            content = WebService.GetTblSite(companyId);
            manager = ivdData.Instance.Site;
        }
        else if (table...)
        {
            ...
        }
        
        if ((content.Length > 0) && UpdateManager(manager, content))
        {
            DateTime updateDate = DateTime.Now;
        
            if (table == Tables.Asset)
            {
                ivdConfig.LAST_UPDATE_ASSET = updateDate;
            }
            else if (table == Tables.Site)
            {
                ivdConfig.LAST_UPDATE_SITE = updateDate;
            }
            else if (table...)
            {
                ...
            }
        }
        

        【讨论】:

        • 这是我想避免的事情,因为我必须处理的表格数量。但是,如果这是唯一的方法,那么我想我会坚持遵循这种模式!
        【解决方案5】:

        确实有 PropertyInfo.SetValue 方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          • 2021-09-01
          相关资源
          最近更新 更多