C# 例外情况;System.InvalidProgrameException:JIT编译器遇到内部限制;发生了

C# 例外情况;System.InvalidProgrameException:JIT编译器遇到内部限制;发生了,c#,visual-studio,unit-testing,testing,jit,C#,Visual Studio,Unit Testing,Testing,Jit,示例代码: 下面的代码不完整,但足以说明我面临的wt问题 namespace ClassLibrary1 { class Class1 { internal static void sum(ref List<TestClass> a, int b) { //some code } } } 当我为方法sum创建单元测试用例时,代码如下 [TestMethod()] pu

示例代码:

下面的代码不完整,但足以说明我面临的wt问题

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

             //some code

         }
     }

}
当我为方法sum创建单元测试用例时,代码如下

[TestMethod()] 
public void sumTest()
{
    List<TestClass_Accessor> lstTestClass = new List<TestClass_Accessor>(); 
    Class1_Accessor.sum(ref lstTestClass, b); 
}
[TestMethod()]
公共测试()
{
List lstTestClass=新列表();
类1_访问器.sum(参考LSTTESCLASS,b);
}
问题:在上面的代码中,我正在创建TestClass类型的列表,但它是私有类,所以VST创建TestClass_访问器来访问类功能。 在方法Sum中,它将参数作为类型为“TestClass”的列表的引用

我也调试了我的代码,但当

Class1\u访问器.sum(参考lstestclass,b)已调试,但引发异常“System.InvalidProgrameException:JIT编译器遇到内部限制”

当我创建字符串类型的列表时,它就工作了,即列表没有问题

根据我的理解,问题在列表的类型中。在单元测试中,我们创建类型
TestClass\u访问器的列表

类内列表的类型为
list

请为此提供解决方案

问候,


Nitin Sahu

我听不懂你在说什么。但是 TestClass在您提供的代码中不是私有的。默认情况下,当未指定访问修饰符时,它是内部的。而且您可以在测试中轻松访问内部成员。当您消除额外的东西(TestClass_访问器)时,可能不会有任何问题

看这里:


顺便说一句,传递参考值时,您不需要
ref

我无法理解您所说的内容。但是 TestClass在您提供的代码中不是私有的。默认情况下,当未指定访问修饰符时,它是内部的。而且您可以在测试中轻松访问内部成员。当您消除额外的东西(TestClass_访问器)时,可能不会有任何问题

看这里:

顺便说一句,传递参考值时不需要
ref

使用“ref”是问题的一部分。我也有同样的问题,当不使用“ref”关键字时,它就消失了

正如Peri已经指出的,这里不需要使用ref。

使用“ref”是这里问题的一部分。我也有同样的问题,当不使用“ref”关键字时,它就消失了


正如Peri已经指出的,这里不需要使用ref。

有时,即使使用参考值,也需要使用
ref
。例如,当类型不可变时。但我不确定这里是否需要它,也不确定不可变类型的含义。当您想在方法调用后更改引用点时,可以按引用传递引用类型。对于可变类型,您可以在不更改引用的情况下以某种方式更改值(例如更改
人员的
名称
),因此您可能不需要
引用
。对于不可变类型(例如
string
),如果希望调用方法中的更改显而易见,则始终需要
ref
。正如我在查询顶部提到的,顺便说一句,代码尚未完成,让我更清楚地告诉您。Class1是内部的。有Class1的内部方法“和”。为了创建这个meyhod的单元测试,我需要Class1b/c的访问器,它是内部的。方法sum将第一个参数作为TestClass的列表。所以当我在单元测试用例中调用方法sum时。我还需要创建TestClass_类型的列表访问器(B/c测试类也是内部的)问题是我创建TestClass_类型的列表对象访问器,并且在实际方法中有TestClass类型的列表对象。您在您的终端生成相同的场景。创建用户定义的类类型为内部的列表对象。如果您有任何其他疑问,请让我知道,如果您发现,请提供任何解决方案。有时,即使有参考值,也需要
ref
。例如,当类型不可变时。但我不确定这里是否需要它,也不确定不可变类型的含义。当您想在方法调用后更改引用点时,可以按引用传递引用类型。对于可变类型,您可以在不更改引用的情况下以某种方式更改值(例如更改
人员的
名称
),因此您可能不需要
引用
。对于不可变类型(例如
string
),如果希望调用方法中的更改显而易见,则始终需要
ref
。正如我在查询顶部提到的,顺便说一句,代码尚未完成,让我更清楚地告诉您。Class1是内部的。有Class1的内部方法“和”。为了创建这个meyhod的单元测试,我需要Class1b/c的访问器,它是内部的。方法sum将第一个参数作为TestClass的列表。所以当我在单元测试用例中调用方法sum时。我还需要创建TestClass_类型的列表访问器(B/c测试类也是内部的)问题是我创建TestClass_类型的列表对象访问器,并且在实际方法中有TestClass类型的列表对象。您在您的终端生成相同的场景。创建用户定义的类类型为内部的列表对象。如果您有任何其他疑问,请让我知道,并提供任何解决方案,如果你发现。
[TestMethod()] 
public void sumTest()
{
    List<TestClass_Accessor> lstTestClass = new List<TestClass_Accessor>(); 
    Class1_Accessor.sum(ref lstTestClass, b); 
}