2016-12-03 22 views
0

私の方法ValidationObjectは私が辞書にC#のオブジェクトのキャスト<文字列、オブジェクトに>

var modelValidations = new Dictionary<string, object>(); 
var validations = GetValidations(nextParms); 
modelValidations = modelValidations.Concat(validations).ToDictionary(x => x.Key, x => x.Value); 

このメソッドを呼び出しますが、私は

取得に

その後Objectタイプです

parms.ValidationObject = new { validations = new Dictionary<string, object>() { { parms.JsonObjectName, modelValidations } } }; 
    return parms.ValidationObject; 

'オブジェクト'から変換できません。 'System.Collections.Generic.IEnumerable>'

Dictionary<string, object>への簡易キャストは機能しません。私に何ができる?

+1

1) 'ValidationObject'はあなたが言うように、' object'の直接的な意味ではありません。 * anonymous *タイプです。 2) 'GetValidations(nextParms)'の戻り値の型は何ですか –

答えて

1

あなたは明確ではありませんでしたが、あなたは「私の方法」であると言うとき:

parms.ValidationObject = new { validations = new Dictionary<string, object>() { { parms.JsonObjectName, modelValidations } } }; 
    return parms.ValidationObject; 

私はあなたが上記のコードであることを意味すると仮定メソッドへの実装、GetValidations。その場合、メソッドの戻り値の型は、のの型がparms.ValidationObjectであることができないため、メソッドの戻り値の型はおそらくobjectであり、メソッドから漏れない匿名型です。

実際の問題は、validationsプロパティをと定義して、その匿名タイプを外部メソッドから使​​用しようとしていることだと思います。本当にあなたは戻ってこれをやめるべきです。宣言されているメソッドの外で匿名型を使用したい場合は、間違いをしたことを意味します。

代わりにどちらか、必要な値を返すoutパラメータを使用し、全く新しいコンクリートの型を定義するか、単に辞書(parms.ValidationObject.validations)自体を返すようにTupleバリアントを使用する - あなたは匿名型を使用している理由、それは完全に不明ですここでは1つのプロパティしか定義していないためです。どのような状況でも、型が宣言されているメソッドの外部で静的に匿名型と対話しようとするべきではありません。

1

に渡す前に、検証をSystem.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>にキャストする必要があります。

にもこの変更を行います。

parms.ValidationObject = new Dictionary<string, object>() { parms.JsonObjectName, modelValidations }; 
+0

'検証の型は何ですか? OPは彼の方法がトップに戻ってくると言っていたので –

+0

。そして、彼はそれを別の辞書と連結しようとしています、そして、エラーもそれを言います。あなたのコメントはあまりにも辞書の直接のインスタンスではないことについて有用でした。 – CodingYoshi

関連する問題