让一个类表现得像一个字符串

时间:2012-10-17 10:39:00

标签: .net oop class

是否有可能有一个类似字符串的类,但允许我有一些额外的属性?

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

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

End If

从我所看到的,我需要实现一个类型,可以通过它在构造函数中传递字符串的方式进行分配:

例如A = Something应解释为A = New MyClass("Something")。另外,我需要覆盖比较运算符,以便我的代码可以处理If A = "SomethingElse" Then来检查基础字符串值

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

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

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

1 个答案:

答案 0 :(得分:3)

可以使用System.String中的custom implicit conversionXNamespace执行此操作,例如<{1}},例如 1 。是否用于比较,我不确定。

我通常非常紧张隐式转换,并且会对此提出警告。使用构造函数或静态工厂方法,或者可能是从string转换为相关类型的扩展方法,可以更清楚地说明这一点:

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

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