2011-07-28 26 views
2

サンプル・コードを発生した:コードの下例外「System.InvalidProgramException:JITコンパイラが内部制限に遭遇したが、」

は完全ではないが、私が直面しています重量の問題を表示するのに十分です。

namespace ClassLibrary1 
{ 
    class Class1 
    { 
     internal static void sum(ref List<TestClass> a, int b) 
     { 

      //some code 

     } 
    } 

} 

別のクラスは、私は方法の和のユニットテストケースを作成するときにコードが

[TestMethod()] 
public void sumTest() 
{ 
    List<TestClass_Accessor> lstTestClass = new List<TestClass_Accessor>(); 
    Class1_Accessor.sum(ref lstTestClass, b); 
} 

問題のようであろう

namespace ClassLibrary1 
{ 
    class TestClass 
    { 
     //code 

    } 

} 

同じアセンブリであり:上記のコードでは、私が作成していTestClassタイプのリストですが、プライベートクラスなので、VSTSはクラス機能にアクセスするためにTestClass_Accessorを作成します。 メソッドSumでは、 "TestClass"タイプのリストの参照としてパラメータを受け取ります。

私も自分のコードをデバッグしているが、

Class1_Accessor.sum(ref lstTestClass, b);がデバッグされたときに例外をスローする「System.InvalidProgramExceptionは:JITコンパイラは、内部の制限に遭遇しました」。

私は文字列型のリストを作成すると動作します。つまり、リストに問題はありません。

私の理解によれば、問題はリストのタイプにあります。ユニットテストではタイプTestClass_Accessorのリストを作成します。

クラスリストには、タイプList<TestClass>があります。

解決策をご提供ください。

よろしく、

ニティンSahu

答えて

0

私はあなたが何を言っているか理解する問題があります。しかし、... TestClassはあなたが提供したコードではプライベートではありません。デフォルトでは、アクセス修飾子が指定されていないときは内部です。また、テストで内部メンバーに簡単にアクセスできます。たぶんあなたは追加のもの(TestClass_Accessor)を削除するときに問題はありません。

ここを見て:How to test Framework if Unit tests are in separate assembly?

そして、基準値を渡すときにところであなたはrefは必要ありません。

+0

参照値でも 'ref'が必要になることがあります。たとえば、型が不変の場合です。しかし、私はそれがここで必要であると確信していません。 – svick

+0

不変型の意味がわかりません。メソッド呼び出しの後に参照点を変更する場合は、refで参照型を渡すことができます。 –

+0

変更可能な型では、参照を変更することなく何らかの方法で値を変更することができます(たとえば、 'Person'の' Name'を変更するなど)、 'ref'を必要としません。不変型( 'string'など)の場合、呼び出し元のメソッドで変更を明示するには、常に' ref'が必要です。 – svick

0

「ref」を使用することは、ここでの問題の一部です。私は同じ問題を抱えていて、 "ref"キーワードを使用しないと消えてしまいました。

Periは既に述べたように、ここでrefを使用する必要はありません。

関連する問題