分配给财产没有任何效果

时间:2014-06-13 00:25:15

标签: c# properties

我有一些像这样的代码

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 ="新的东西"不起作用。有谁知道为什么?

3 个答案:

答案 0 :(得分:4)

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

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

请注意,此处的value关键字表示赋值语句右侧的结果(与标识符Value相对,后者是对您定义的其他属性的引用)。

进一步阅读

答案 1 :(得分:2)

你的二传手是空的,所以当然没有任何反应。您所写的财产实际上是只读的。

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

您需要什么,将支持字段设置为value关键字。您可能会对自动隐藏此属性的自动属性语法感到困惑(您使用它声明了Value)。当您手动声明属性时,您必须声明整个内容任何“自动”都会丢失。

答案 2 :(得分:0)

我解决了我的问题如下:

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;}
    }
}