我目前正在处理一些现有的C#代码,并且我只是想在给定代码不存在于系统中时将属性设置为null
。更改虚拟财产
的代码我现在有这个样子的:
if (!CodeExists(SomeClass.Code))
{
SomeClass.Code = null;
}
所以假设SomeClass.Code
开始与100
值。然后它检查Code
是否存在与方法CodeExists()
。如果找不到代码,应该设置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
与它无关。
关于这个话题:
让我怎么现在,我找到了解决办法接受的答案吗?或者我需要关闭这个话题?
[虚拟](http://msdn.microsoft.com/library/9fkccyh4.aspx)不是原因。 – Corak
'virtual'只是意味着“它可以被覆盖”。这可能是这种情况。你必须验证你是否真的有一个SomeClass类型的对象或一个继承者。另一个问题是CodeNumber是什么类型?类或值类型? – oddparity
@oddparity“CodeNumber”被定义为“公共类”。而'SomeClass'真的好像是'SomeClass'类型。在调试器中显示:“SomeClass {CompanyName.Path.Projections.SomeClass}”,当我将光标放在对象上时。 – Vivendi