You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中为值类型属性配套后备属性与isSet属性的模式是否有命名?

问题:追踪值类型属性是否被显式设置的实现模式名称?

我有一个实现了含公共值类型属性接口的C#类。类初始化时,所有值类型属性会被设为对应值类型的默认值,但我需要知晓这些字段是否被实际设置过(尤其是通过控制器API的模型绑定)。

为此,我为接口中的每个值类型属性添加一个私有后备属性与一个公共isSet属性,当值类型属性在初始化后被实际赋值时,将isSet属性设为true。

示例代码如下:

public interface IExampleInterface{
     int intValue {get; set;}
}

public class ExampleImplementor: IExampleInterface{
     public int intValue {get => _intValue; set{_intValue = value; intValueSet = true}}
     private int _intValue {get; set;}
     public bool intValueSet {get;set;} // 注:原示例中类型为int,此处修正为bool以符合语义
}

请问该实现模式是否有特定名称?


解答

这种实现模式通常被称为可追踪属性(Tracked Property),也可以更具体地称为显式设置标记模式(Explicit Set Flag Pattern)。

它的核心逻辑是为每个需要追踪的属性额外维护一个布尔标记,用来区分属性值是类型默认值还是被显式赋值的结果,在API模型绑定这类场景中非常实用——毕竟值类型的默认值(比如int的0、bool的false)有可能是用户的真实输入,也可能只是初始化的默认值,通过标记就能准确区分这两种情况。

另外补充一点:如果允许修改接口定义,.NET内置的Nullable<T>(可空值类型)是更简洁的替代方案——把值类型属性声明为可空后,就可以通过判断属性是否为null来区分是否被设置过。但如果无法修改原有接口,你当前的实现就是完全合理的方案。


内容的提问来源于stack exchange,提问作者misterbee180

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:44