分配给属性没有效果

本文关键字:有效果 属性 分配 | 更新日期: 2023-09-27 18:08:37

我有一些像这样的代码

public class SomeClass
{
    public string Value {get;set;}
    public string DisplayValue
    {
       get 
       {
          if (fieldType == "ImageUri")
          {
             FileInfo file = new FileInfo(Value);
             return Path.Combine(file.Directory.Name, fileName);
          }
          else
          {
             return Value;
          }
       }
       set {}
    }
}

"get"工作得很好,但我不能改变DisplayValue。当我赋一个新值时,它不会被更新。SomeClass。DisplayValue = "something new"不起作用。有人知道为什么吗?

分配给属性没有效果

你实际上需要定义一个setter:

public string DisplayValue
{
   get 
   {
      // some logic
      return Value;
   }
   set 
   {
      // some logic
      Value = value;
   }
}

注意,这里的value关键字表示赋值语句右侧的结果(与标识符Value相反,它是对您定义的另一个属性的引用)。

进一步阅读

  • 属性(c#编程指南)

你的setter是空的,所以当然什么也不会发生。您的属性写入时实际上是只读的。

public string DisplayValue
{
   get 
   {
      ---some logic
      return Value;
   }
   set { Value = value; }
}

是您所需要的,您将backing字段设置为value关键字。您可能对自动属性语法感到困惑,它向您隐藏了这一点(您用它声明了Value)。当你手动声明一个属性时,你必须声明整个属性任何"自定义性"都丢失了

我是这样解决我的问题的:

public class SomeClass
{
    private string _displayValue;
    public string Value {get;set;}
    public string DisplayValue
    {
        get 
        {
           if (string.IsNullOrEmpty(_displayValue))
           {
               if (fieldType == "ImageUri")
               {
                   FileInfo file = new FileInfo(Value);
                   return Path.Combine(file.Directory.Name, fileName);
               }
               else
               {
                   return Value;
               }
            }
            else
            {
                return _displayValue;
            }
       }
       set {_displayValue = value;}
    }
}