2013-08-29 321 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與它無關。