2

我想要实现的是说我有一个数组,我希望能够通过指向它来修改整个代码中的特定数组元素。

例如在 C++ 中我可以做到这一点

int main(){
 int arr [5]= {1,2,3,4,5};
 int *c = &arr[3];
 cout << arr[3] <<endl;
 *c = 0;
 cout << arr[3]<<endl;
}

我做了一些谷歌搜索,似乎有办法通过“不安全”来做到这一点,但我真的不想走那条路。

我想我可以创建一个变量来存储索引,但实际上我正在处理稍微复杂的问题(列表中的列表。所以有两个索引变量似乎增加了代码的复杂性。)

C# 有一个数据绑定类,所以我目前正在做的是将数组元素绑定到一个文本框(我已经隐藏)并在我想修改特定数组元素时修改该文本框,但这也不是一个好的解决方案(因为我有一个文本框没有用于其预期目的 - 有点误导)。

4

4 回答 4

2

您希望使用的外观的 AC# 示例会有所帮助。如果我明白你在问什么,像这样的简单课程可能会做到这一点。不过,您所要求的似乎不是一个好主意。如果您展示了您需要的更大范围,那么有人可能会指出一个更好的设计,您根本不需要这种功能。

public class ListElement<T> {
    private IList<T> list;
    private int index;
    public ListElement(IList<T> list, int index) {
        this.list = list;
        this.index = index;
    }
    public T Value {
        get {
            return list[index];
        }
        set {
            list[index] = value;
        }
    }
}

使用这个看起来像

int[] arr = new int[] {1,2,3,4,5};
ListElement<int> third = new ListElement<int>(arr, 2);
Console.WriteLine(third.Value);
third.Value = 0;
Console.WriteLine(third.Value);
于 2012-12-17T17:20:17.287 回答
0

我不确定这是否完全适合,但问题是这些指针在 c# 中是不可能的。

LinkedList<T> 如果您有更复杂的列表,如果您想更改列表中的元素,可以查看它提供的一种高效方式。

于 2012-12-17T17:16:14.563 回答
0

我在 C# 中想出了一个解决方案。当然,这是即兴的,所以它可能不适用于所有情况,但我确实根据您的情况对其进行了简要测试。

class Wrapper<T>
{
    private T[] array;
    private T item;
    private int index;
    public T Item { get { return item; } set { item = value;
        array[Index] = value;
    } }

    public int Index
    {
        get { return index; }
        set
        {
            index = value;
            Item = array[value];

        }    
    }

    public Wrapper(T[] arr)
    {
        array = arr;
    }

}

然后,您可以像这样使用该类:

    class Program
{
    static void Main(string[] args)
    {
        int[] i = {1, 2, 3, 4, 5};
        i.ToList().ForEach(x => Console.WriteLine(x));
        Wrapper<int> w = new Wrapper<int>(i);
        w.Index = 2;
        w.Item = 5;


        i.ToList().ForEach(x => Console.WriteLine(x));
        Console.ReadLine();
    }
}

这将给出输出:1234512545

它不像 C++ 中的解决方案那样漂亮,但它会按照您的意愿工作,并提供一个更“自动”的引用数组的版本。

于 2012-12-17T17:21:25.833 回答
0

我会将您的数组包装在Objects. 在 C# 中,需要指针操作的东西通常最好用对象来完成。

优点是对象允许更清晰的命名和访问更复杂的数据结构。你是对的,传递索引集并不理想——排序和索引很容易混淆。事实上,我认为是你所在位置的人决定面向对象编程是一个好主意!

所以你有class MyArray { },并且可以像使用指针一样使用“对象引用”,而且你可以创建MyArray[].

于 2012-12-17T17:22:15.480 回答