使用反射传递参数时,Visual Studio强制转换是多余的

时间:2016-08-11 17:36:35

标签: c# reflection

使用这行代码,VS2015显示" Cast是多余的"两个参数(但工作!!)。

Activator.CreateInstance(type, (IOperationContext)null, (Dictionary<string, object>)null);

然而,如果我删除它们,我会得到:

Activator.CreateInstance(type, null, null);

它抛出&#34; System.MissingMethodException &#34;例外:

  

类型的构造函数   &#39; iBI.Services.Hsd.Operations.Schedule.RefreshUsedOperation&#39;没找到。

使用有什么问题,或者这只是visual studio的假alram?

4 个答案:

答案 0 :(得分:4)

致电时

npm install

它实际上是调用

String sql ="BEGIN;" +
                        "DELETE FROM users WHERE username='gg';" +
                        "DELETE FROM comprofiler WHERE id=611;" +
                        "COMMIT;";


st.execute(sql);

方法重载和此CreateInstance重载查找无法找到的无参数ctor。

致电时

Activator.CreateInstance(type, null, null)

然后调用

CreateInstance(Type type, object[] args, object[] activationAttributes)

过载。然后发现并召唤了两个参数。这两个参数都是空的。

答案 1 :(得分:1)

我会说这是VS的误报,因为反射需要那些演员来知道要调用哪个构造。如果没有这些转换,您提供的参数没有类型,这使得Activator无法知道要使用哪个签名,特别是如果您有多个构造函数,这些构造函数采用不同类型的2个参数。警告可能来自这样的事实:在几乎所有其他情况下这确实是多余的,因为null可以适用于所有引用类型(如果您尝试在值类型中放置null,编译器将抛出错误)和将(有点)采取其容器的类型。此时,如果您希望可以使用Visual Studio打开错误报告,因为这确实可以(应该?)修复。

答案 2 :(得分:1)

实际上,Visual Studio是正确的,因为 两个 强制转换都是多余的。如果您删除其中一个演员阵容但将另一个演员阵容留在那里,VS将停止抱怨,因为您没有任何多余的演员阵容,但仍有足够的信息来调用正确的方法重载:

这两个选项都很好:

flash

答案 3 :(得分:1)

IDE没有问题。只需打开MSDN并查看覆盖:thisthis。当你写道:

Activator.CreateInstance(type, (IOperationContext)null, (Dictionary<string, object>)null);

.NET知道它应该使用second method。当你写下:

Activator.CreateInstance(type, null, null);

我认为,.NET将其解释为first method,这就是你遇到问题的原因。 您可以尝试编写下一个代码:

Activator.CreateInstance(youType, args:null, activationAttributes:null);

它应该有用。