根据当前值初始化数组

时间:2019-07-04 06:15:18

标签: c# arrays

我想初始化一个c#数组。我事先不知道我将要存储多少值。我知道这个数字将在0到5之间。

这是最好的方法吗?

private CompiledRuleMethod CompileRuleMethod(Rule r)
{
  int sizeParameters = 0;
  if (r.Param1 != "") sizeParameters++;
  if (r.Param2 != "") sizeParameters++;
  if (r.Param3 != "") sizeParameters++;
  if (r.Param4 != "") sizeParameters++;
  if (r.Param5 != "") sizeParameters++;
  object[] parameters = new object[sizeParameters];
  if (r.Param1 != "") parameters[0] = r.Param1;
  if (r.Param2 != "") parameters[1] = r.Param2;
  if (r.Param3 != "") parameters[2] = r.Param3;
  if (r.Param4 != "") parameters[3] = r.Param4;
  if (r.Param5 != "") parameters[4] = r.Param5;

  return new CompiledRuleMethod(DelegateFactory.Create(typeof(RuleMethod).GetMethod(r.MethodName)),parameters);
}

我敢肯定不是。

2 个答案:

答案 0 :(得分:1)

请注意,您当前的代码实际上不起作用。例如,如果仅Param4为空,则sizeParameters为4。然后创建一个长度为4的parameters数组。但是,当执行到达最后一行时,它将尝试将Param5放入数组的索引4,导致IndexOutofRangeException

似乎您只想过滤掉那些空的参数,而保留那些不空的参数。

您可以首先将所需的所有参数放入数组:

var unfilteredParams = new[] {r.Param1, r.Param2, r.Param3, r.Param4, r.Param5};

然后使用Where对其进行过滤:

var filteredParams = unfilteredParams.Where(x => x != "").ToArray();

答案 1 :(得分:0)

不要使用数组。如果您不知道需要多少物品,则使用列表更为合适。然后,您可以使用list.Add(r.Param)附加项目。尽管没有更多背景信息,但很难说出什么是最佳方法。