我如何捕捉CS7036错误

时间:2018-08-23 18:12:06

标签: 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;
    }
}

我已经对此进行了Google搜索,发现该错误几乎没有。这是指向Microsoft的C#文档的链接。Herehere.

我的问题不是如何解决该错误,而是如何捕获它,就这样我很清楚。

2 个答案:

答案 0 :(得分:11)

您在这里误解了一些基本知识。编译器错误不是运行时异常。它们是编译器,告诉您代码完全不合法。没有任何功能可以在运行时捕获编译器错误,因为非法代码永远不会首先运行。这是非法的!

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

您不在那种情况下,很少会遇到涉及构造函数的动态情况。如果将来遇到这种情况,则要捕获的异常为RuntimeBinderException

如果您对此主题感兴趣,请参见How does having a dynamic variable affect performance?,以获取有关dynamic工作原理的一些想法。

答案 1 :(得分:0)

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