我有一些像这样的代码
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 ="新的东西"不起作用。有谁知道为什么?
答案 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;}
}
}