Javascript 如何捕获CS7036错误

Javascript 如何捕获CS7036错误,javascript,c#,Javascript,C#,因此,我对C#还是相当陌生的,我一直在学习如何将我的代码从python翻译成C#。现在我遇到的问题是:如何捕捉CS7036错误。在python中,它被称为“AttributeError”,如果您试图实例化一个类,而没有所需数量的参数,就会发生这种情况 public Vector Crossproduct(Vector other) { try { List<double> output = new List<double>()

因此,我对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;
    }
}
公共向量叉积(向量其他)
{
尝试
{
列表输出=新列表()
{
Y*other.Z-other.Y*Z,0-(X*other.Z-other.X*Z),X*other.Y-other.X*Y
};
矢量输出矢量=新矢量(输出);
返回输出向量;
}
捕获(例外)
{
投
}
}
我在谷歌上搜索了一下,发现这个错误几乎没有什么。这里有一个指向Microsoft C#文档的链接。及


我的问题不是如何修复错误,而是如何捕获错误,我很清楚。

C#是一种编译语言,因此您不必“捕获”这种错误,因为编译器会为您捕获它。如果试图调用没有所需参数的类构造函数,代码将无法编译。

C#是一种编译语言,因此您不必“捕获”此类错误,因为编译器会为您捕获它。如果您试图在没有必需参数的情况下调用类构造函数,那么您的代码将无法编译。

您在这里误解了一些基本信息。编译器错误不是运行时异常;他们是编译器,告诉你代码根本不合法。没有在运行时捕获编译器错误的工具,因为非法代码从一开始就不会运行;这是违法的

现在,在C#中存在这样的情况:编译器错误在运行时生成,涉及动态。也就是说:C#有一个子系统,允许它与动态语言(如Python或JavaScript)进行互操作。当使用该特性时,通常在编译时做出的决定会推迟到运行时,在这种情况下,您实际上可能处于必须在运行时捕获编译器错误的场景中

您不在这种情况下,而且很少处于涉及构造函数的动态情况下。如果您将来遇到这种情况,您希望捕获的异常是
RuntimeBinderException


如果您对这个主题感兴趣,请参阅了解有关
动态
工作原理的一些想法。

您在这里误解了一些基本内容。编译器错误不是运行时异常;他们是编译器,告诉你代码根本不合法。没有在运行时捕获编译器错误的工具,因为非法代码从一开始就不会运行;这是违法的

现在,在C#中存在这样的情况:编译器错误在运行时生成,涉及动态。也就是说:C#有一个子系统,允许它与动态语言(如Python或JavaScript)进行互操作。当使用该特性时,通常在编译时做出的决定会推迟到运行时,在这种情况下,您实际上可能处于必须在运行时捕获编译器错误的场景中

您不在这种情况下,而且很少处于涉及构造函数的动态情况下。如果您将来遇到这种情况,您希望捕获的异常是
RuntimeBinderException


如果您对这个主题感兴趣,请参阅了解有关
动态
如何工作的一些想法。

因为这在C#中是不可能的,所以不需要在运行时捕捉它!CS7036不是运行时引发的异常。这是一个编译器错误。这就是为什么您无法捕获它。尝试在不提供参数的情况下实例化一个类,看看会发生什么。编译器将不允许这样做。为什么将无效参数传递给构造函数对您有意义?非常感谢大家!正如我所说的,我是C#的新手。这肯定会对我有很大帮助。因为这在C#中是不可能的,所以没有必要在运行时捕获它!CS7036不是运行时引发的异常。这是一个编译器错误。这就是为什么您无法捕获它。尝试在不提供参数的情况下实例化一个类,看看会发生什么。编译器将不允许这样做。为什么将无效参数传递给构造函数对您有意义?非常感谢大家!正如我所说的,我是C#的新手。这肯定对我有很大帮助。不是所有的编译器都拒绝编译非法代码。例如,EclipseJava编译器允许您编译包含语法错误的代码。请注意,在生产代码中使用此功能是一个糟糕的想法。老实说,在开发过程中,有人甚至会使用这个功能,这让人觉得很奇怪。@Brian:上世纪90年代,我开发了一个JavaScript编译器,它有一种模式,可以让几乎所有的程序进行编译,并且会尽最大努力进行猜测。作为一个演示,我们将通过它运行Visual Basic程序,有些时候,它们的工作原理是一样的!但在我看来,JavaScript的设计选择是极其宽容错误,这是一个糟糕的选择;这意味着没有两个浏览器实现相同的语言,从而大大增加了web开发人员的测试负担。最好从一开始就对JS非常严格。并非所有编译器都拒绝编译非法代码。例如,EclipseJava编译器允许您编译包含语法错误的代码。请注意,在生产代码中使用此功能是一个糟糕的想法。老实说,在开发过程中,有人甚至会使用这个功能,这让人觉得很奇怪。@Brian:上世纪90年代,我开发了一个JavaScript编译器,它有一种模式,可以让几乎所有的程序进行编译,并且会尽最大努力进行猜测。作为一个演示,我们将通过它运行Visual Basic程序,有些时候,它们的工作原理是一样的!但在我看来,JavaScript的设计选择是极其宽容错误,这是一个糟糕的选择;它是m