在方法中声明一个 c# 列表

Declaring a c# list inside method

我正在尝试将 Fortran 77 代码复制到 C#。 这是导致问题的行(至少我认为):

real acl,c(0:10)

如何在 C# 中的某些方法下声明这个新的 c 列表? 像这样:

float acl;
float[] c = new float[0:10];

?

感谢您的回复。

你在这里:

float[] c = new float[11];

MSDN Arrays Tutorial 是有用的参考。

希望对您有所帮助。

您的标题表明您可能会混淆 listarray。我相信您是在问如何 FORTRAN 数组转换为 C# 数组。

您正在转换的 FORTRAN 变量是数组,而不是列表。它们将永远是数组。 FORTRAN 中没有列表,除非您自己编写它们。

我的阅读和测试表明 C# 不支持选择您自己的数组索引下限。换句话说:下限始终为零。 C# 中的数组索引始终为 zero-based。所以你不能直接翻译 FORTRAN 数组,除非它们的 lower-bound 已经是零。

以你为例:

float[] c = new float[1:7];

因为 lower-bound 是 1,而不是零,你必须 shift-down 任何索引为 1。

您的示例数组需要包含 7 个元素,因此在 C# 中将其声明为:

float[] c = new float[7];

这些元素的寻址或索引将是:

float[0] = 10.5f;  // the first element
float[1] = ...     // the second element
float[6] = ...     // the last element
float[7] =         // runtime error: array index out of bounds

因此您需要在 C# 代码中偏移索引以适应这种转变。

P.S。作为实验,我尝试在 C# 中使用 bounds-specifiers 分配一个数组,例如 float[1:7] 并得到一个编译器错误,表明它不期望​​ lower-bound.

正如 hungndv 所写,float[] c = new float[11]; 是该数组的正确声明。

real acl,c(0:10) 声明了一个实变量和一个实数组。在本例中,它指定了一个包含 11 个元素的数组,从 0 开始到元素 10 结束。默认情况下,在 Fortran 77 中,数组是从 1 开始的,但它们可以选择从零或负数开始。例如:

real d(-10:10,-100:100) 将声明一个二维数组,其中 x 元素基于 -10,y 元素基于 -100。一直希望其他语言也有声明数组底端的功能,在做数学建模的时候发现很有用