所以我对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#文档的链接。Here和here.
我的问题不是如何解决该错误,而是如何捕获它,就这样我很清楚。
答案 0 :(得分:11)
您在这里误解了一些基本知识。编译器错误不是运行时异常。它们是编译器,告诉您代码完全不合法。没有任何功能可以在运行时捕获编译器错误,因为非法代码永远不会首先运行。这是非法的!
现在,在C#中有 种情况,在运行时会产生涉及 dynamic 的编译器错误。也就是说:C#有一个子系统,允许它与动态语言(例如Python或JavaScript)进行互操作。使用该功能时,通常在编译时做出的决定将推迟到运行时,在这种情况下,实际上您可能会遇到必须在运行时捕获编译器错误的情况。 / p>
您不在那种情况下,很少会遇到涉及构造函数的动态情况。如果将来遇到这种情况,则要捕获的异常为RuntimeBinderException
。
如果您对此主题感兴趣,请参见How does having a dynamic variable affect performance?,以获取有关dynamic
工作原理的一些想法。
答案 1 :(得分:0)
C#是一种编译语言,因此您不必“捕获”这种错误,因为编译器会为您捕获它。如果您尝试在没有必需参数的情况下调用类构造函数,则代码将根本无法编译。