0

私は 2 つの辞書を返そうとしましたが、成功しましたが、遅いので満足できません。Tuple でこれまでに行ったことは次のとおりです。別のクラス内の 1 つのメソッドから Tuple を使用して 2 つの辞書を返す

Tupla が遅いという私の声明を裏付けるベンチマークもここにあります: http://www.dotnetperls.com/multiple-return-values

Returning two dictionaries with Tuple from one method within another classから同じ状況を考慮して、Tupla の代わりに KeyValuePair 宣言を使用しようとしましたが、次のエラーが発生します。

タイプ 'System.Tuple,System.Collections.Generic.Dictionary>' を 'System.Collections.Generic.KeyValuePair,System.Collections.Generic.Dictionary>' に暗黙的に変換することはできません

そのためのコードは次のとおりです。

class AClass
{
    Dictionary<string, string> dictOne = new Dictionary<string, string>();
    Dictionary<string, string> dictTwo = new Dictionary<string, string>();

    public KeyValuePair<Dictionary<string, string>, Dictionary<string, string>> MyMethodOne()
    {
        //Adding items dictOne and dictTwo

        return new KeyValuePair<Dictionary<string, string>, Dictionary<string, string>>(dictOne, dictTwo);
    }
}

class BClass 
{
        AClass _ac = new AClass();

        Dictionary<string, string> dictThree = new Dictionary<string, string>();
        Dictionary<string, string> dictFour = new Dictionary<string, string>();

        public void MyMethodTwo()
        {
         //Here I get mentioned error
         KeyValuePair<Dictionary<string, string>, Dictionary<string, string>> calledKVP = _ac.MyMethodOne();

         Dictionary<string, string> dictThree = calledKVP.Key;
         Dictionary<string, string> dictFour = calledKVP.Value;
         //After this I loop through dictThree and dictFour and do what I need
        }
    }

残念ながら、これは「トゥプラ方式」以外の方法ではできないということです。

助言がありますか?

4

1 に答える 1

4

Tupleまず、クラスを使用できます

public Tuple<Dictionary<T1, T2>, Dictionary<T1, T2>> GetDictionaries<T1, T2>()
{
    var dict1 = new Dictionary<T1, T2>();
    var dict2 = new Dictionary<T1, T2>();
    return Tuple.Create(dict1, dict2);
}

public void Method()
{
    var result = GetDictionaries(int, string);
    var dict1 = result.Item1;
    var dict2 = result.Item2;
}

複数の出力パラメーターを持つ別の解決策は、パラメーターを使用するoutことです

public void SetDictionaries(
    out Dictionary<int, string> dict1, out dictionary<int, double> dict2)
{

    dict1 = new Dictionary<int, string);
    dict2 = new Dictionary<int, double);

}

public void Method()
{
    Dictionary<int, string) dict1;
    Dictionary<int, double) dict2;

    SetDictionaries(out dict1, out dict2);
}

KeyValuePair を使用

public KeyValuePair<Dictionary<int, int>, Dictionary<string, string>> GetDictionaries()
{
    var dict1 = new Dictionary<int, int>();
    var dict2 = new Dictionary<string, string>();

    return new KeyValuePair<Dictionary<int, int>, Dictionary<string, string>>(dict1, dict2);
}


public void Method()
{
    var result = GetDictionaries();
    var dict1 = result.Key;
    var dict2 = result.Value;
}
于 2012-12-05T09:16:18.897 に答える