gpt4 book ai didi

C# 引用数组

转载 作者:太空狗 更新时间:2023-10-29 20:21:44 25 4
gpt4 key购买 nike

我怎样才能做这样的事情?

int v1 = 4;
int v2 = 3;
int v3 = 2;
int v4 = 1;

int [] vars = new int [] {ref v1, ref v2, ref v3, ref v4};

for (var i = 0; i < 4; i++) {
ChangeVar (vars [i], i);
}

void ChangeVar (ref int thatVar, int newValue) {
thatVar = newValue;
}

编辑:

我想这样做是因为其他类可以直接访问这些变量。例如 v1 可以是某物的宽度,v2 可以是某物的高度。我的一些类使用 width 变量来限制它必须从用户那里获得的输入的长度。有些类使用高度变量来做其他事情。但我希望能够使用循环编辑这些变量,因为现在编辑过程是这样进行的:

int indexOfVarToChange = GetIndex ();

switch (indexOfVarToChange) {
case 0:
int newValue = GetNewValue ();
width = newValue;
break;
case 1:
int newValue = GetNewValue ();
height = newValue;
break;
}

我必须手动重新分配变量,因为我无法在循环中使用这些变量的引用数组。我有 30 多个唯一变量需要执行此操作,这很痛苦。

我想后备计划是将所有这些变量移动到一个字典中,并拥有一个包含所有键的数组,并将每个键传递给编辑函数。

最佳答案

不,你不能。

您仍然可以就地编辑元素,但只能通过直接分配给它们:

 vars[2] += 42;

但我刚刚测试了这个作品:

using System;
public class Test
{
private static void assign(ref int i)
{
i = 42;
}

public static void Main()
{
var vars = new [] { 1,2,3,4 };
Console.WriteLine(vars[2]);
assign(ref vars[2]);
Console.WriteLine(vars[2]);
}
}

查看 LIVE http://ideone.com/fz36y

输出

3
42

更新:包装器

作为一种脑力练习,我想出了这种病态和扭曲的机制来仍然得到你想要的东西(但比简单地装箱所有整数的成本更高):

private class Wrap<T> where T : struct
{
public T Value;

public static implicit operator Wrap<T>(T v) { return new Wrap<T> { Value = v }; }
public static implicit operator T(Wrap<T> w) { return w.Value; }

public override string ToString() { return Value.ToString(); }
public override int GetHashCode() { return Value.GetHashCode(); }
// TODO other delegating operators/overloads
}

现在,一个 Wrap<int>将大致表现为常规 int(需要在比较、相等和运算符领域做更多工作)。你可以用它来写这个,并让它按照你想要的方式工作:

private static void assign(ref int i)
{
i = 42;
}

public static void Main()
{
Wrap<int> element = 7;
var vars = new Wrap<int>[] {1, 2, element, 3, 4};
Console.WriteLine(vars[2]);
assign(ref vars[2].Value);
Console.WriteLine(element);

Console.ReadKey();
}

输出:

7
42

查看 live too: http://ideone.com/b0m7T

关于C# 引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7472278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com