我目前正在處理一些現有的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