3

是否有可能拥有一个行为类似于字符串但允许我拥有一些附加属性的类?

具体来说,我希望能够做类似的事情

Dim A As MyClass ''Or New MyClass("InitialValue")
A = "Something"
If A = "SomethingElse" Then

End If

据我所见,我需要实现一种可以分配的类型,以便在构造函数中传递字符串:

egA = Something应解释为A = New MyClass("Something"). 此外,然后我需要覆盖比较运算符,以便If A = "SomethingElse" Then可以由检查底层字符串值的代码处理

由于String是密封的/不可继承的,而且 String 似乎在 .Net 中有一些特殊处理,所以我对如何处理这个问题感到有些困惑。

为了解释为什么需要它,我有一个实体类(不是 EF),它被序列化以生成针对搜索索引的查询。查询是通过针对我的实体指定 lambda 来创建的。

我现在需要修改实体上的某些属性,以便它们不是序列化为简单字符串(用于传递给搜索索引),而是复杂的对象。我无法控制序列化本身(目前在 Newtonsoft Json.Net 内部处理),所以我希望这将是一个(更快的)替代方案,允许我使用现有的 lambdas 等......

4

1 回答 1

3

可以使用自定义隐式转换为分配执行此操作System.StringXNamespace例如1。这是否适用于比较,我不确定。

我通常对隐式转换非常紧张,并会敦促对此保持谨慎。拥有一个构造函数或静态工厂方法,或者可能是一个扩展方法来转换string为相关类型,会使这一点更清楚:

Dim A = new MyClass("Something")
If A = "SomethingElse".ToMyClass()

1 LINQ to XML 包含一堆打破规则的设计决策,使其更易于使用。这是天才能够胜过正常的良好实践的一个例子——但我们大多数人都没有那种水平的天才。

于 2012-10-17T10:40:39.207 回答