-1

我是具有 python 背景的 c# 新手。

在python中,我可以这样做:

a = [1, 5, 10] #initialize

a = [1, 3, 5] #change the value

我如何a = {1, 3, 5}在 c# 上执行?目前我找到了这种方式。

int[] a = {1, 5, 10}; //initialize

int[] b = {1 ,3, 5}; //create new reference type

a = (int[])b.Clone(); //change the value

有没有更好的方法将整个数组a从更改{1, 5, 10}{1 ,3, 5}

a = [1, 3, 5]在 python 到 C# 上?

4

4 回答 4

4

也许我错过了什么,但肯定只是......

a = new int[]{1, 3, 5};
于 2013-08-29T11:11:32.660 回答
1

是的,您可以使用索引器(从零开始)

a[2] = 5;

如果你想改变整个数组,然后为它分配一个新的引用,比如

int[] a = new[] {1, 2, 10};
a = new[] {1,2,5};

您的原始数组将丢失对它的所有引用并成为 GC 的对象。第二行分配a对新数组的引用。

于 2013-08-29T11:10:02.640 回答
1

a是一个变量,就像在 python 中一样。

当您分配给变量a = {1, 5, 10}时,它会将引用的值分配给变量中的数组。这是分配数组的简写语法。

要重新分配变量,您只需使用new运算符再次分配给它a = new[] {1, 5, 5}

样本:

int[] a = {1, 5, 10}; // Shorthand syntax for creating array

a = new[] {1, 5, 5}; // Reassign using new operator

请参阅数组初始值设定项

于 2013-08-29T11:15:13.233 回答
1

[编辑:似乎 OP 不想复制现有数组,而只是想创建一个全新的数组。但我会把它留在这里以防万一。]

这是创建数组副本的正常方法,而不仅仅是对原始数组的引用。

有一种更快的方法,那就是Array.Copy()直接使用。您可以将其包装在扩展方法中以使其更易于使用:

/// <summary>Shallow clones an array.</summary>
/// <typeparam name="T">The type of array elements.</typeparam>
/// <param name="array">An array to clone.</param>
/// <returns>The cloned array.</returns>
/// <remarks>This is much faster than the built-in <see cref="Array.Clone"/> method.</remarks>

public static T[] ShallowClone<T>(this T[] array)
{
    if (array == null)
    {
        throw new ArgumentNullException("array");
    }

    T[] result = new T[array.Length];
    Array.Copy(array, result, array.Length);
    return result;
}

通常你不会担心性能,但这确实比使用Array.Copy().

你可以像这样使用它:

int[] a = {1, 2, 3};

int[] b = a.ShallowClone();

这样,它既更快不需要强制转换(当然你也可以编写一个使用Array.Clone(). 的扩展方法)

于 2013-08-29T11:26:34.233 回答