将变量存储在列表/数组中并循环到后面的c#
对不起,我想我刚才不清楚。我正试着按照O.R.mapper下面所说的去做——创建一个任意变量的列表,然后在以后的foreach循环中获取它们的值 此外,所有变量都是字符串类型,因此我认为可以在一个列表中列出。谢谢 是否有一种方法可以将变量存储在列表或数组中,然后在以后循环使用它们 例如:我在c类中有三个变量,分别命名为x、y和Z 我可以做一些类似于: 公共列表Max_One=新列表{c.x,c.y,c.z}将变量存储在列表/数组中并循环到后面的c#,c#,collections,C#,Collections,对不起,我想我刚才不清楚。我正试着按照O.R.mapper下面所说的去做——创建一个任意变量的列表,然后在以后的foreach循环中获取它们的值 此外,所有变量都是字符串类型,因此我认为可以在一个列表中列出。谢谢 是否有一种方法可以将变量存储在列表或数组中,然后在以后循环使用它们 例如:我在c类中有三个变量,分别命名为x、y和Z 我可以做一些类似于: 公共列表Max_One=新列表{c.x,c.y,c.z} 然后在代码的后面 foreach (string var in M
然后在代码的后面
foreach (string var in Max_One)
{
if ((var < 0) | (var > 1 ))
{
// some code here
}
}
foreach(最大值中的字符串变量)
{
如果((var<0)|(var>1))
{
//这里有一些代码
}
}
是,例如,如果它们都是字符串
s:
public List<string> Max_One = new List<string> {c.x,c.y,c.z};
您可以尝试使用:
List<object> list = new List<object>
{
c.x,
c.y,
c.z
};
List List=新列表
{
c、 x,,
c、 y,,
c、 z
};
如果属性是数字(int
),则可以执行以下操作:
List<int> Max_One = new List<int> { c.x, c.y, c.Z };
将列表声明中的
int
替换为正确的数字类型(double
,decimal
,等等)。我将以相反的方式回答您的问题
首先,您不能用“var”命名变量,因为它是保留名称。所以你能为foreach做的是
foreach (var x in Max_One)
{
if ((x< 0) || (x> 1 ))
{
// some code here
}
}
您需要知道的主要一点是,为了存储在列表中,成员必须来自同一数据类型,因此除非a、b和c来自同一数据类型,否则您不能将它们存储在同一列表中,除非您定义了存储数据类型“object”元素的列表。
如果使用“Object”方法,则需要将元素强制转换为原始类型,例如:
var x = (int) Max_One[0];
您可以从本网站上阅读更多关于列表和其他备选方案的信息
另外,如果这是一个家庭作业,那么你应该阅读更多,并从视频教程和书籍中学到更多;) 您希望提前存储变量列表有什么特殊原因吗?如果只要在需要时重用这样的列表就足够了,我会选择创建一个返回
IEnumerable
的属性:
public IEnumerable Max\u One{
得到{
收益率c.x;
收益率c.y;
收益率c.z;
}
}
只有在调用属性getter时,才会检索此枚举中返回的值。因此,生成的可枚举项将始终包含c.x
、c.y
和c.z
的当前值
然后,您可以使用您在问题中提到的foreach
循环迭代这些值
如果您需要逐渐组合变量列表,这可能不实用;在这种情况下,您可能必须使用反射。如果这是真的需要,请让我知道;我可以提供一个例子,但它会变得更加详细和复杂。我看不出困难所在,当然可以接受吗?您是在尝试将变量值放入列表/数组,还是变量引用?您的代码应该可以按原样工作,“C#
var
中的cept是一个关键字(避免使用或在其前面加上前缀@var
)如果希望它们是字符串,则必须声明类型。换言之,是要按创建列表/数组时的状态存储变量值,还是要选择一些任意变量,然后在显示的foreach
循环中获取它们当时的当前值?抱歉,我想我不是ot在前面明确了我要做的事情。我正试图按照O.R.mapper所说的去做-创建一个任意变量的列表,然后在foreach循环中获取它们的值。谢谢。谢谢mapper。这只是为了检查我们从SQL中提取的数据,使其具有可接受的值(比如对于integer,将有一个范围).所以,我想将类似类型和范围的变量存储在一个列表或数组中,然后循环。不确定这样做是否正确。谢谢。嗨,还有一个问题。有没有办法获取变量名(“上例中的c.x”)稍后在foreach循环中?非常感谢。@MG_UK:不,一般来说这很难做到。即使以反射的方式进行,也无法通过反射知道您从哪个变量(指针!)访问给定的对象实例,即使这样,局部变量名在没有调试信息的情况下也可能无法进入已编译的二进制文件。
foreach (var x in Max_One)
{
if ((x< 0) || (x> 1 ))
{
// some code here
}
}
public List Max_One = new List {c.x,c.y,c.z}
var x = (int) Max_One[0];
public IEnumerable<string> Max_One {
get {
yield return c.x;
yield return c.y;
yield return c.z;
}
}