2013-08-29 116 views
1

我目前正在处理一些现有的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与它无关。


关于这个话题:

让我怎么现在,我找到了解决办法接受的答案吗?或者我需要关闭这个话题?

+2

[虚拟](http://msdn.microsoft.com/library/9fkccyh4.aspx)不是原因。 – Corak

+1

'virtual'只是意味着“它可以被覆盖”。这可能是这种情况。你必须验证你是否真的有一个SomeClass类型的对象或一个继承者。另一个问题是CodeNumber是什么类型?类或值类型? – oddparity

+0

@oddparity“CodeNumber”被定义为“公共类”。而'SomeClass'真的好像是'SomeClass'类型。在调试器中显示:“SomeClass {CompanyName.Path.Projections.SomeClass}”,当我将光标放在对象上时。 – Vivendi

回答

0

似乎代码的其他部分的问题是:

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与它无关。