我想初始化一个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);
}
我敢肯定不是。
答案 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)附加项目。尽管没有更多背景信息,但很难说出什么是最佳方法。