更改虚拟财产

时间:2013-08-29 10:53:24

标签: c# .net

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


关于此主题:

那么,如果我找到解决方案,我该如何接受答案呢?或者我是否需要关闭此主题?

1 个答案:

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