2011-11-18 51 views
2

如果你把它复制到VS2010中,它会哭泣和死亡。为什么?为什么这样杀vs 2010

一位同事通过邮件向我发送了这样的消息,说这就是为什么动态关键字是危险的,并警告说它会杀死VS,我将它复制到我正在做的事情上,并且看到VS2010崩溃。摧毁我早上工作的大部分)。

警告,它会杀死VS无需编译或其他任何输入,如果它的存在VS会崩溃。

namespace Crash 
{ 

    public class Foo 
    { 
     public static void Method(object o) 
     { 

     } 
    } 

    public class Bar 
    { 
     public Foo Foo { get; set; } 

     public static void Method(dynamic d) 
     { 
      Foo.Method(d); //This crashes VS instantly! 
     } 
    } 
} 
+3

这听起来像,应该在连接报告的错误。 – SLaks

+0

如果您只想调用其类的静态方法,为什么要创建对象的实例? – 0xbadf00d

+4

你应该更经常地保存你的工作。 –

回答

8

有人已经为此记录了一个错误。

http://connect.microsoft.com/VisualStudio/feedback/details/704397/vs-crash-when-passing-dynamic-val-to-static-member-of-class-from-a-static-method-in-c

条件需要使碰撞:

  • 静态方法调用必须仅通过类名被引用(即,没有一个命名空间)。
  • 进行调用的方法也必须是静态的,它属于类必须具有相同的名称,其方法被调用类的非静态属性。
  • 传递给它的动态值可以来自任何地方 - 它不一定是调用函数的参数,如示例中所示。