我如何捕获CS7036错误

1 javascript c#

所以我对C#很新,我一直在学习将我的代码从python转换为C#.现在我偶然发现的问题是:我如何捕获CS7036错误.它在python中被称为"AttributeError",如果你试图实例化一个类而没有所需数量的参数,它就会发生.

public Vector Crossproduct(Vector other)
{
    try
    {
        List<double> output = new List<double>()
        {
            Y* other.Z - other.Y * Z,0 - (X * other.Z- other.X * Z),X* other.Y - other.X * Y
        };
        Vector outputvector = new Vector(output);
        return outputvector;
    }
    catch (Exception)
    {

        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了这一点,发现此错误几乎没有任何内容.这是Microsoft的C#文档的链接.这里这里.

我的问题不是如何修复错误,而是如何捕获它,只是让我很清楚.

Eri*_*ert 11

你在这里误解了一些基本的东西.编译器错误不是运行时异常; 他们是编译器告诉你,代码是不合法的,在所有.在运行时没有用于捕获编译器错误的工具,因为非法代码永远不会在第一时间运行; 这是非法的!

现在,在C#中存在一些情况,其中在运行时涉及动态生成编译器错误.那就是:C#有一个子系统,允许它与动态语言(如Python或JavaScript)互操作.使用该功能时,通常在编译时进行的决策将推迟到运行时,在这种情况下,您实际上可能处于必须在运行时捕获编译器错误的情况.

你不是那种情况,并且在涉及构造函数的动态情况下很少见.如果您将来处于这种情况,您想要捕获的例外是RuntimeBinderException.

请参阅如何使动态变量影响性能?关于如何dynamic运作的一些想法,如果这个主题感兴趣你.

  • @Brian:早在20世纪90年代,我就开发了一个JavaScript编译器,它有一个允许编译几乎*任何*程序的模式,并且会做出最好的猜测.作为演示,我们将通过它运行*Visual Basic*程序,有些时候,它们的工作方式相同!但在我看来,JavaScript的设计选择是非常宽容的错误是一个糟糕的; 这意味着没有两个浏览器实现相同的语言,从而大大增加了Web开发人员的测试负担.从一开始就让JS变得非常严格会更好. (4认同)