1

次のように表すことができる構造を使用しています。

IEnumerable<KeyValuePair<TKey, TValue>>

書くには長すぎることを考えると (コード分析がおそらく警告を発することは考慮していません)、より表現力豊かな型を使用することをお勧めします。.NET Framework にそのような型はありますか、それとも独自に作成する必要がありますか?

辞書と同じではないことに注意してください。

IDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>

辞書はすべてのキーが一意であることを保証するためですが、これは私の場合ではありません。私もルックアップを使用できません:

Lookup<TKey, TValue> : IEnumerable<IGrouping<TKey, TValue>>

ルックアップは遅延していないためです。つまり、グループ化するためにすべてのデータをフラッシュする必要があります。

4

6 に答える 6

6

キーと値に 2 つの特定の型がある場合は、次のようにして型エイリアスを使用できます。

using PairSequence = System.Collections.Generic.IEnumerable<
    System.Collections.Generic.KeyValuePair<string, int>>;
于 2013-03-06T21:15:58.487 に答える
2

それはそれが得られるのと同じくらい良いことです。構造体 KeyValuePair は、インターフェースの方法であまり実装しません。もちろん、インターフェイスの継承を使用して独自のインターフェイスを作成し、基本的に名前を変更することもできますが、実装する型はカスタムインターフェイスIEnumerable<KeyValuePair<TKey, TValue>> を実装しないため、これを行うことで得られるものよりも多くを失うことになります。IEnumerable<KeyValuePair<TKey, TValue>>

于 2013-03-06T21:15:13.897 に答える
1

(冗談半分、本気半分)

IEnumerable<KeyValuePair<TKey, TValue>>  <= length: 40 chars
IEnumerable<Tuple<TKey,TValue>> <= length: 32 chars
IList<Tuple<TKey,TValue>> <= length: 26 chars

using場合によっては、いくつかの使用方法を台無しにすることもできます。

using IEI = IEnumerable<int>;   // for example
于 2013-03-06T21:17:45.883 に答える
0

実装するだけの問題IEnumerable<KeyValuePair<TKey,TValue>>は、バッキングストアがないことです。

原則として、数値や文字列などの場合でも、問題のドメイン内のものを表す型を実装する必要があります。たとえば、文字列を使用して郵便番号を表す場合、データ型についてはあまりわかりませんが、というカスタムデータ型を使用するとPostalCode、さらに多くのことがわかります。さらに良いのは、抽象データ型PostalCode(国固有の具体的な実装がある場合があります)です。

特にコレクションを使用するカスタムタイプでは、非特定のコレクションクラスが行うすべての機能を提供することなく、必要な機能だけを公開できます。さらに、問題のあるドメインに関連するドメイン制限を実装できます。たとえばUsZipCode、抽象型から継承する具象PostalCodeは、値を10進数の5桁または9桁に制限する場合がありますが、具象CanadianPostalCodeは、値が2つの3文字の英数字シーケンスで構成される必要がある場合があります。

しかし、私は逸脱します。

私はおそらく次のような独自のクラスを作成するでしょう:

public class MyListOfKeysAndValues : IList<KeyValuePair<MyKeyType,MyValueType>>
{
  private List<KeyValuePair<MyKeyType,MyValueType>> MyBackingStore ;
  ...
}

必要な最小限のメソッド/プロパティを公開します。

于 2013-03-06T21:30:35.703 に答える
0

.NET Framework にはありません。

于 2013-03-06T21:15:56.057 に答える
0

あなたがすでに除外した辞書以外に、そのような構造を表すフレームワークには何も気づいていません。

于 2013-03-06T21:13:56.730 に答える