C#传递list元素的值以更新局部变量

时间:2009-11-11 23:04:11

标签: c# .net variables

我有一些局部变量,我想将它们全部除以所有相同的数字。

decimal a = 0;
decimal b = 0;
decimal c = 0; 
...
decimal n = 0;
decimal divisor = 0;

<perform calculations to give all variables meaningful values>

divide each decimal (a - n) by divisor then assign value

除了将每个变量分配和赋值:

a = a / divisor;
b = b / divisor;
and so on...

有更快的方法吗?我正在考虑将它们全部放入一个集合并迭代它的方式......

我不需要列表中的值,我需要变量来包含它们。我正在考虑使用指针列表,迭代它并以这种方式设置值。

4 个答案:

答案 0 :(得分:3)

绝对 - 使用数组(decimal[])或List<decimal>然后:

for (int i = 0; i < list.Count; i++)
{
    list[i] /= divisor;
}

或者,您可以选择更具功能性的方法,LINQ使其变得特别容易:

IEnumerable<decimal> divided = list.Select(x => x / divisor);

您可以分别使用IEnumerable<decimal>ToArray方法从ToList构建新的数组或列表。例如,您可以写:

list = list.Select(x => x / divisor).ToList();

请注意,这与第一个代码不同 - 它使list变量引用包含分割数字的 new 列表;如果其他任何内容都引用了原始列表,则不会看到任何更改。

答案 1 :(得分:1)

如果你将它们放在一个集合中,你可以这样做:

var myCollection = // setup the collection;

var newCollection = from i in myCollection
                    select i / divisor;

这将为您提供一个新的集合,其中所有原始元素除以您的“除数”变量。

答案 2 :(得分:1)

“请注意,这与第一个代码不同 - 它使列表变量引用包含分割数字的新列表;如果其他任何内容都有对原始列表的引用,则它将看不到任何变化。” - J Skeet

根据问题 - “我不需要列表中的值,我需要变量来包含它们。我正在考虑使用指针列表,迭代它并以这种方式设置值的行。“

这是不可能的正如Copsey先生指出的那样 - “你最好使用值列表,就像Jon建议的那样。试着制作一个指向原始值的指针列表迭代它们等等,不仅仅是直接设置它们(加上更少的可维护性)。“

答案 3 :(得分:0)

var result = new List<decimal>(14) {a, b, c, d, e, f, g, h, i, j, k, l, m, n}
                   .ForEach(x => x /= divisor};

当然,这实际上不会调整变量a,b,c ... n。