更改虚拟属性
本文关键字:属性 虚拟 | 更新日期: 2023-09-27 18:29:40
我目前正在处理一些现有的C#代码,我只想在系统中不存在给定代码时将属性设置为null
。
我目前拥有的代码如下:
if (!CodeExists(SomeClass.Code))
{
SomeClass.Code = null;
}
因此,假设SomeClass.Code
以值100
开始。然后,它用方法CodeExists()
检查Code
是否存在。如果找不到代码,则应设置SomeClass.Code = null
。
但是,当我用调试器遍历这段代码时,我发现SomeClass.Code
根本没有改变,即使调试器在if
语句中。
当我查看属性Code
时,我发现它被声明为virtual
:
public virtual CodeNumber Code { get; set; }
这是否意味着我不能简单地更改声明为virtual
的值?我能做些什么来改变Code
的值吗?
似乎代码的其他部分出现了问题:
public SomeClassProjection SomeClass
{
get
{
// some stuff is done here
SomeClassState.Value = queryProcessor
.Execute(new ExistingProductsQuery { OrderNumber = SelectedOrderNumber });
return SomeClassState.Value;
}
}
因此返回SomeClassState
。这是这样定义的:
public ViewValue<SomeClassProjection> SomeClassState;
所以它确实使用了另一个类,就像你们中的一些人建议的那样。而ViewValue
清楚地告诉它是readyonly
。这意味着我必须采取另一种方法,但至少我现在知道是什么阻止了我编辑该属性,并且virtual
与它无关。
关于本主题:
那么,既然我找到了解决方案,我该如何接受答案呢?还是我需要结束这个话题?
似乎代码的其他部分出现了问题:
public SomeClassProjection SomeClass
{
get
{
// some stuff is done here
SomeClassState.Value = queryProcessor
.Execute(new ExistingProductsQuery { OrderNumber = SelectedOrderNumber });
return SomeClassState.Value;
}
}
因此返回SomeClassState
。这是这样定义的:
public ViewValue<SomeClassProjection> SomeClassState;
所以它确实使用了另一个类,就像你们中的一些人建议的那样。而ViewValue
清楚地告诉它是readyonly
。这意味着我必须采取另一种方法,但至少我现在知道是什么阻止了我编辑该属性,并且virtual
与它无关