サンプル・コードを発生した:コードの下例外「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
参照値でも 'ref'が必要になることがあります。たとえば、型が不変の場合です。しかし、私はそれがここで必要であると確信していません。 – svick
不変型の意味がわかりません。メソッド呼び出しの後に参照点を変更する場合は、refで参照型を渡すことができます。 –
変更可能な型では、参照を変更することなく何らかの方法で値を変更することができます(たとえば、 'Person'の' Name'を変更するなど)、 'ref'を必要としません。不変型( 'string'など)の場合、呼び出し元のメソッドで変更を明示するには、常に' ref'が必要です。 – svick