我目前正在处理一些现有的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
与它无关。
关于此主题:
那么,如果我找到解决方案,我该如何接受答案呢?或者我是否需要关闭此主题?
答案 0 :(得分: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
与它无关。