C#メソッドの命名規則:ToSomethingとAsSomething


82

ビジネスロジックオブジェクトの拡張メソッドをいくつか書いているときに、変換メソッドの名前を変更することになりました。someObject.ToAnotherObject()広く使用されているとうまくいくでしょうobject.ToString()

ただし、たとえばLINQは両方のバリアントを混同しており、それらの違いを見つけることができません。ToDictionary()ToList()AsParallel()AsQueryable()、...

これらの2つの命名規則の違いは何ですか?また、自分のクラスに使用するかどうかを決定するために知っておくべきことは何ですか?

回答:


91

ToDictionaryまた、元のコレクションまたはそのプロパティの構造的同一性を必ずしも保持しないため、ToList接頭辞が付けられToます。

  • aList<T>をaに変換するDictionary<K, V>と、まったく新しい構造のコレクションが作成されます。
  • aHashSet<T>をに変換するとList<T>、セットの一意性プロパティが削除されます。

接頭辞が付いたメソッドAsは、これらのことを何も行いません。元のコレクションの代替ビューを提供するだけです。彼らはそれを豊かにします。


41
だから、リンゴの上に私が呼び出すことができます.AsCleanApple()私はそれを洗浄する必要があるため、と.ToFruitSalad()私のナイフはapple‽の構造を変えてしまうため
Physikbuddha

3
@Physikbuddha基本的にはそうです。
MKII 2015

37
@Physikbuddhaリンゴについて何かAsCleanApple変えるように私には思えます。より良い例えは次のようになりますAsFruit
dcastro 2015

4
.AsCleanAppleSource()リンゴの源であったものをきれいなリンゴの源であったものに変えるでしょう。必要に応じて洗浄ステップを追加しますが、おそらく何もしないと、リンゴはすでにきれいであることがわかっていました。.ToPunnet()そのソースにアクセスして、リンゴのパンネットを提供します。
ジョンハンナ

2
これは厳密には当てはまりませんが、一般的には「AsXXX()」をキャスト、「ToXXX()」を変換と考えることができます。
nateirvin 2015

26

Linqでは、ToXXXすべてのメソッドがクエリを実行し、結果から新しいオブジェクトを作成しますが、AsXXXメソッドは何らかの点で異なる新しいクエリを生成します。これは、同じオブジェクトであるが、(異なるインターフェイスを介してアクセスすることがありAsEnumerable()、これはありません)、またはそれは新しいオブジェクトでもよいという変更機能(他の方法は、彼らは単に指定されたオブジェクトを返すことができるならば、いくつかのチェックが見ても、例えば、これを行うAsQueryable()意志すでにsource実装されIQueryable<T>ている場合は戻り、EnumerableQuery<TElement>そうでない場合は新しいものを作成します)。


that alters how the functionality-how不要ですか、それともステートメントの次の部分があるべきですか?
kapol 2015

@Kapolいいえ、作成と入力を同時に行うことによって発生するタイプミスです。
ジョンハンナ

これが正解だと思います。つまり、元のインスタンスのアクティブな投影と静的な投影です。ToXXX()元のデータとは関係なくデータを投影します。AsXXX()オリジナルとのアクティブな関係を維持します(少なくとも、説明しているEnumerable / Queryableの例では)。
ティム・メドラ

以下のための+1ToXXX execute the queryAsXXX produce a new query。私がLINQで読んだものから正しく聞こえMSDNはToXXXを確認しているようですが、すべての AsXXXメソッドが遅延実行されているかどうかのソースを誰かが持っているかどうか疑問に思っていますか?
brichins 2015

1
@brichinsはAsXXX、Linqに固有のプロバイダー(たとえば、AsParallelPLinqによって追加されたもの、AsNoTrackingEntity Frameworkによって提供されたもの、等々)。確かに、linqのコアはとによって定義されるものでQueryableありEnumerable、これら2つのクラスは両方ともその規則に従います。ほとんどの追加は、「すべて」がおそらく正しい範囲で行われますが、オープンすぎて常に正しいとは限りません(ただし、設計上の欠陥があると考えます)。
ジョンハンナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.