C# ReferenceType值和ValueType值的Snappy名称

C# ReferenceType值和ValueType值的Snappy名称,c#,naming,C#,Naming,我有两门课。一个处理ReferenceType值,另一个处理ValueType值。这是唯一的区别,但很重要。我正在努力为每个班级找到一个像样的名字: ReferenceTypeValueHandler和ValueTypeValueHandler 不,ValueTypeValue听起来很混乱 ClassValueHandler和StructValueHandler 我不应该在类的名称中使用“Class”,是吗 NullableValueHandler和NonNullableValueHa

我有两门课。一个处理ReferenceType值,另一个处理ValueType值。这是唯一的区别,但很重要。我正在努力为每个班级找到一个像样的名字:

  • ReferenceTypeValueHandler和ValueTypeValueHandler
不,ValueTypeValue听起来很混乱

  • ClassValueHandler和StructValueHandler
我不应该在类的名称中使用“Class”,是吗

  • NullableValueHandler和NonNullableValueHandler
“可空”已用于可空值类型(可空)

  • HeapValueHandler和StackValueHandler
那太蠢了。利用引用类型值存储在堆中而值类型值存储在堆栈中这一事实,谁在乎呢?另外,“Stack”也让人困惑,这意味着它与堆栈有关

还有什么想法吗

更新:

有些人建议我解释一下上课的目的。虽然我不认为这很重要,但事实是:我正在开发一个XML到实体的反序列化程序。我使用XmlReader来利用流线型读取,而不是使用DOM。当我阅读XML时,我构建实体。有些实体只是其他实体的包装。这些包装器可以采用单个实体或实体集合(可枚举)。对于那些只接受一个实体的实体,必须提供这个实体,而且必须只提供一次。如果XML没有,那就是一个问题。如果XML的值超过1,这也是一个问题。因此,为了保存并确保实体只提供一次,我有一个类
ValueKeeper
。它有两种方法
TakeValue(TValue-value)
TValue-ClaimValue()
。TakeValue方法获取该值并检查之前是否已经提供了一个值,如果已经提供了,则抛出包含适当详细信息的异常。一旦完成对包装器XML的读取,并且必须在刮取的值上创建包装器实体,就会调用ClaimValue方法。如果有,此方法将检查是否有通过TakeValue方法接收的值
它只返回该值,如果否,则抛出异常。现在的问题是,对于引用类型的值,我使用与NULL的比较来查看是否提供了该值。为了使这种比较成为可能,必须对TValue类型参数有一个通用约束:
其中TValue:class
。有了这个约束,我不能将这个类用于值类型值。因此,我需要另一个类,它做同样的操作,但对值
进行操作,其中TValue:struct
使用
Nullable
字段来保留已提供或尚未提供的值。现在,对于两个类,我不能只使用ValueKeeper,我需要一个名称作为引用类型,另一个名称作为值类型。这就是问题所在。我需要一种方式来表达这种微妙的差异。但同样,类的作用并不重要,重要的是找到适当的方法来澄清这种差异。

我不同意类名的其余部分不重要。您希望让您的代码自己说话,并使读者更容易理解您在设计类/结构时想到的概念。你建议的类名不会让我知道这个类实际上在做什么。我建议搜索更具体的名称:如何处理该值?什么价值

除了一个是类,另一个是结构之外,结构值和类值之间有什么区别?必须有更多的区别,否则就没有意义将同一事物作为结构和类(DRY)

如果您执行的是非常抽象的操作,请尝试搜索模式或概念的通用名称。保留该值并确保提供该值听起来有点像缓存机制

其次,您在这里面临一个语义问题:什么是包含值类型的“值”和引用类型的“值”的术语。我们可以在这里简单地询问.NET framework的继承链,并将其称为对象

因此,在本例中,类似于
CacheForValueTypeObjects
CacheForReferenceTypeObjects
的东西可以工作。我不知道cache是否很好地表达了这个目的,但如果不是,我会尝试搜索一个最能描述类的“最终”目的的术语,以及它出现的原因


我打赌你不会认为‘我现在真正需要的是一个ValueTypeValueHandler!’。还有更多的东西我喜欢这样的问题,谢谢

进一步描述类的目的可能会有所帮助。类的目的是保留该值并确保提供了该值。其实这并不重要,类的其他名称可以是任何名称,重要的是反映类所使用的值的类型。您好,@bonomo,您是否考虑过使用Equals(valueObject,default(TValue))而不是valueObject==null?没有必要对引用类型和值类型进行区分……好吧,你说使用Equals,什么的Equals?第二个默认值(Int32)是0,这是一个合法的数字值,因此它会告诉我,虽然有一个值,但没有值,但恰好是0。我的意思是,我当然可以想出一个单一的类解决方案,它可以只是一个在提供值时设置的标志,所有的扣减都可以通过检查该标志而不是值来进行,但它并没有消除类似问题的问题,我只是更新了问题。CaseFoalValuePyObjes听起来不错,我可以考虑一下,谢谢。