如何使用动态列表名称?

时间:2014-02-13 11:56:46

标签: c#

p1.Contains(listname[i, 0]);

p2.Contains(listname[i, 0]);

有没有办法替换p1和p2并改为使用变量。 我想做像

这样的事情
"p" + variableName.Contains(listname[i, 0]);

这不起作用。

有人可以告诉我如何才能完成这项工作吗?

5 个答案:

答案 0 :(得分:3)

使用数组或哈希表。

var p = new ICollection[2];
p[0] = p0;
p[1] = p1;
...
p[your_variable].Contains(listname[i,0]);

您无法通过名称访问变量,因为它们的名称在运行时不会持久存在,例如: CLR没有机会找到变量“p1”的值。

答案 1 :(得分:1)

您可以创建p数组而不是声明多个变量。假设p1p2是字符串。

P []p = new P[10];

for(int i = 0; i < p.Length; i++)
     p[i].Contains(listname[i, 0]

如果你能使用List

会更好
List<P> p = new List<P>();

for(int i = 0; i < p.Length; i++)
   p[i].Contains(listname[i, 0]
基于评论的

修改p1p2是集合

 var p = new ICollection[2];
 List<P> p1 = new List<P>();
 List<P> p2 = new List<P>();
 p[0] = p1;
 p[1] = p2;

p[variableContainZeroOrOne].Contains(listname[i, 0]     

答案 2 :(得分:0)

创建一个以列表作为参数的函数。

public bool doSomething (List list, int i)
{
    bool test = list.Contains(listname[i, 0]);
    return test;
}

答案 3 :(得分:0)

只需创建List类型的变量并为其指定正确的列表。在其余代码中使用此变量...

答案 4 :(得分:0)

如果你有变量p1p2,并且想要使用数字引用,那么:

解决方案1,创建辅助方法

string PX(int number)
{
   switch(number)
   {
       case 1: return p1;
       case 2: return p2;
   }

   // or
   if(number == 1) return p1;
   if(number == 2) return p2;
}

// usage
PX(x).Contains(blablabla);

解决方案2,使用索引

// helper array
string[] px = new string[] {p1, p2};
// usage
px[i - 1].Contains(blablabla);

// helper array
string[] px = new string[] {null, p1, p2};
// usage
px[i].Contains(blablabla);

解决方案3,使用键值集合。

解决方案4,使用反射。

解决方案3和4速度较慢且不必要的开销。索引很快,辅助方法或帮助程序数组不是太多,在构造属性时要考虑遵循

private string[] _px = string[2];
public string[] PX { get { return px; } }
public string P1
{
    get { return _px[0]; }
    set { _px[0] = value; }
}
public string P2
{
    get { return _px[1]; }
    set { _px[1] = value; }
}

这样数据最初保存在数组中=您不会浪费内存,同时可以按索引PX[index]或名称P1 / P2访问值。