p1.Contains(listname[i, 0]);
p2.Contains(listname[i, 0]);
有没有办法替换p1和p2并改为使用变量。 我想做像
这样的事情"p" + variableName.Contains(listname[i, 0]);
这不起作用。
有人可以告诉我如何才能完成这项工作吗?
答案 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数组而不是声明多个变量。假设p1
和p2
是字符串。
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]
基于评论的 修改,p1
和p2
是集合
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)
如果你有变量p1
,p2
,并且想要使用数字引用,那么:
解决方案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
访问值。