3

文字列のように動作するが、追加のプロパティを持つことができるクラスを持つことは可能ですか?

具体的には、次のようなことができるようになりたいです

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には.Netで特別な処理があるように見えるためString、これにアプローチする方法について少し困惑しています。

必要な理由を説明するために、検索インデックスに対するクエリを生成するためにシリアル化されたエンティティ クラス (EF ではない) を用意しました。クエリは、エンティティに対してラムダを指定することによって作成されます。

エンティティの特定のプロパティを変更して、(検索インデックスに渡すための) 単純な文字列にシリアル化するのではなく、複雑なオブジェクトにする必要があります。シリアライゼーション自体を制御することはできません (現在は Newtonsoft Json.Net 内で処理されています) ので、既存のラムダなどを使用できる (より迅速な) 代替手段になることを望んでいました...

4

1 に答える 1

3

たとえば1のように、からカスタムの暗黙的な変換を使用して、割り当てに対してこれを行うことができます。それが比較にも役立つかどうかはわかりません。System.StringXNamespace

私は通常、暗黙の変換に非常に神経質であり、これについては注意を促します。コンストラクターまたは静的ファクトリ メソッド、またはstring関連する型に変換するための拡張メソッドを使用すると、これがより明確になります。

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

1 LINQ to XML には、ルールを破る多くの設計上の決定が含まれており、使いやすくなっています。これは、天才が通常の優れた実践を打ち負かすことができる例ですが、私たちのほとんどはそのレベルの天才を持っていません.

于 2012-10-17T10:40:39.207 に答える