将变量存储在列表/数组中并循环遍历c#

时间:2012-07-31 13:40:45

标签: c# collections

对不起,我想我早些时候不清楚。我试图像O.R.mapper所说的那样 - 创建一个任意变量列表,然后在foreach循环中获取它们的值。

此外,所有变量都是字符串类型,所以我认为可以列在一个列表中。谢谢。

有没有办法将变量存储在列表或数组中,然后再循环遍历它们。

例如:我在类c中有三个变量,名为x,y和Z。

我可以这样做:

public List Max_One = new List {c.x,c.y,c.z}


然后在代码中

          foreach (string var in Max_One)
          {                   
              if ((var < 0) | (var > 1 ))
              {
                // some code here
              }
          }

5 个答案:

答案 0 :(得分:0)

是的,例如如果他们都是string s:

public List<string> Max_One = new List<string> {c.x,c.y,c.z};

这使用collection initializer语法。

stringint进行比较是没有意义的。这是一个有效的例子:

  foreach (string var in Max_One)
  {                   
      if (string.IsNullOrEmpty(var))
      {
        // some code here
      }
  }

答案 1 :(得分:0)

您可以尝试使用:

List<object> list = new List<object>
{
  c.x,
  c.y,
  c.z  
};

答案 2 :(得分:0)

如果你的属性是数字(例如int),你可以这样做:

List<int> Max_One = new List<int> { c.x, c.y, c.Z };

并使用您的foreach这样

foreach(int myNum in Max_One) { ... } //you can't name an iterator 'var', it's a reserved word

将列表声明中的int替换为正确的数字类型(doubledecimal等。)

答案 3 :(得分:0)

我会以相反的方式回答你的问题

首先,您不能使用“var”命名变量,因为它是保留名称。那么你能为foreach做些什么呢

foreach (var x in Max_One)
      {                   
          if ((x< 0) || (x> 1 ))
          {
            // some code here
          }
      }

如果你有.Net 3.0及更高版本的框架,你可以使用“var”将x定义为Max_One列表的成员,而不必担心x的实际类型。如果您的版本低于3.0版,那么您需要指定x的数据类型,在这种情况下,您的代码是有效的(尽管仍有风险)

最后一点(这是你的第一点)

public List Max_One = new List {c.x,c.y,c.z}

您需要知道的主要事情是,为了存储在列表中,成员必须来自相同的数据类型,因此除非a,b和c来自相同的数据类型,否则无法将它们存储在相同的列表除非您定义了列表以存储数据类型“object”的元素。 如果使用“对象”方法,则需要将元素转换为原始类型,例如:

var x = (int) Max_One[0];

您可以从此网站了解有关列表和其他替代方案的更多信息 http://www.dotnetperls.com/collections

P.S。如果这是一个家庭作业,那么你应该阅读更多,并从视频教程和书籍中学到更多;)

答案 4 :(得分:0)

是否有特殊原因要事先存储变量列表?如果只要您需要重复这样的列表就足够了,我会选择创建一个返回IEnumerable<string>的属性:

public IEnumerable<string> Max_One {
    get {
        yield return c.x;
        yield return c.y;
        yield return c.z;
    }
}

只有在调用属性getter时才会检索此枚举中返回的值。因此,结果可枚举将始终包含c.xc.yc.z的当前值。

然后,您可以使用foreach循环迭代这些值,如您自己在问题中提到的那样。

如果你需要逐步组合变量列表,这可能不实用;在这种情况下,您可能需要使用反射。如果真的需要,请告诉我;我可以为此提供一个例子,但它会变得更加冗长和复杂。