代码之家  ›  专栏  ›  技术社区  ›  Ragepotato

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

  •  0
  • Ragepotato  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  3
  •   Jon Skeet    16 年前

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

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

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

    您可以从中构建新的数组或列表 IEnumerable<decimal> 使用 ToArray ToList 方法分别采用。比如你 能够 写:

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

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

        2
  •  1
  •   Reed Copsey    16 年前

    如果您在一个集合中有它们,您可以这样做:

    var myCollection = // setup the collection;
    
    var newCollection = from i in myCollection
                        select i / divisor;
    

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

        3
  •  1
  •   Ragepotato    16 年前

    “请注意,这与第一个代码不同-它使list变量引用一个包含被除数的新列表;如果其他任何内容引用了原始列表,它将看不到任何更改。”-J Skeet

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

    正如Copsey先生所指出的——“你最好像Jon建议的那样使用值列表。尝试创建一个指向原始值的指针列表,迭代它们,等等,将比直接设置它们(加上更少的可维护性)更为费力。”

        4
  •  0
  •   John Rayner    16 年前
    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

    推荐文章