更改虚拟属性

本文关键字:属性 虚拟 | 更新日期: 2023-09-27 18:29:40

我目前正在处理一些现有的C#代码,我只想在系统中不存在给定代码时将属性设置为null

我目前拥有的代码如下:

if (!CodeExists(SomeClass.Code))
{
    SomeClass.Code = null;
}

因此,假设SomeClass.Code以值100开始。然后,它用方法CodeExists()检查Code是否存在。如果找不到代码,则应设置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与它无关。


关于本主题:

那么,既然我找到了解决方案,我该如何接受答案呢?还是我需要结束这个话题?

更改虚拟属性

似乎代码的其他部分出现了问题:

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