我正在将一些Fortran90代码转换为C#.我对Fortran77有一些了解,但对Fortran90不熟悉.我遇到了以下代码行,我不确定如何翻译.
C1 = real(product((/(-1,i1=1,m-1)/))*product((/(i1,i1=2,m)/)))
Run Code Online (Sandbox Code Playgroud)
我认为这应该转换为:
int product1 = -1; int product2 = 1;
for (int i1 = 1 ; i1 <= (m-1); i1++)
{
product1 *= -1;
}
for (int i2 = 2, i2 <= m; i2++)
{
product2 *= i2;
}
float C1 = (float)(product1 * product2);
Run Code Online (Sandbox Code Playgroud)
我的不确定性源于这样一个事实:存在一个隐含的do循环结构用于初始化数组; 即
A = (/2*I, I = 1,5/)
Run Code Online (Sandbox Code Playgroud)
但我从来没有见过Fortran声明中使用的"产品"这个词.我知道有一个称为PRODUCT的矢量或矩阵乘法的内在函数,但"产品"不是我正在使用的代码中的数组,并且内在函数PRODUCT的语法使用MASK,因此我的声明显然不使用此函数.
任何见解或帮助将不胜感激.谢谢.
我是C#的新手,希望更好地理解异常捕获.这些问题可能是愚蠢的菜鸟问题.它们对我很重要,我提前道歉.
例如,在System.IO Path类GetFullPath中,可以抛出五个异常:ArgumentException,SecurityException,ArgumentNullException,NotSupportedException和PathTooLongException.我知道必须组织catch块,以便首先捕获最具体的异常,最后捕获最常见的异常.
问题1:当MSDN提供有关类抛出的可能异常的信息时,如何知道哪个异常最具体,哪个异常最少?换句话说,如何从MSDN给我的最具体到最不具体的特定顺序来确定?
问题2:我是否需要明确地捕获所有异常,或者仅使用最大的generaL异常捕获所有其他异常?例如,仍然使用Path类,我需要做...
try { ... }
catch(System.ArgumentNullException ane) { ... }
catch(System.NotSupportedException nse) { ... }
catch(System.IO.PathTooLongException ple) { ... }
catch(System.IO.SecurityException se) { ... }
catch(System.ArgumentException ae) { ... }
Run Code Online (Sandbox Code Playgroud)
或者简单......
catch(System.ArgumentException ae) { ... }
Run Code Online (Sandbox Code Playgroud)
赶上所有例外?
问题3:在bool方法中执行以下操作是否是正确的语法结构...
try
{
... ;
return true;
}
catch(System.ArgumentException ae)
{
... ;
return false;
}
Run Code Online (Sandbox Code Playgroud)