【发布时间】:2013-09-03 12:35:12
【问题描述】:
我一直在寻找一种类似的方法来为使用预处理器在 C 中可能的其他东西创建别名(this 问题有点相似,在那里找不到任何有用的东西)。
这就是问题所在:我有一个接收数组的方法,但是数组的每个位置都有特定的含义,就像它们具有特定名称的不同参数一样。我想要做的是通过使用这些特定名称使我的代码更易于阅读(和编写),但另一方面,我不想创建另一个方法调用(如示例 1 中)或分配数组位置到新变量(示例 2),因为性能至关重要。
示例 1:
void OriginalMethodSignature(Type[] values)
{
SimplifiedMethod(values[0], values[1], ... values[n]);
}
void SimplifiedMethod(Type specificName1, Type specificName2, ... Type specificNameN)
{
// simple implementation using specific names instead of values[n]
}
示例 2:
void OriginalMethodSignature(Type[] values)
{
Type specificName1 = values[0];
Type specificName2 = values[1];
...
Type specificNameN = values[n];
// simple implementation using specific names instead of values[n]
}
我无法更改方法签名,因为它在委托中使用,Type 是固定的。
下一个例子稍微好一点,但仍然不是最佳的:
void OriginalMethodSignature(Type[] values)
{
// implementation using values[specificName1] ... values [specificNameN]
}
const int specificName1 = 0;
const int specificName2 = 1;
...
const int specificNameN = n-1;
有没有办法为此目的创建一个 sn-p?如果有,会怎样?
【问题讨论】:
-
能否为每个索引创建一个私有枚举,然后说
values[(int)MyEnum.FirstValue]? -
是的,这总比没有好,我也想出了这个,就像我刚刚发布的编辑一样。
-
不开始争论,但
Enums就像goto。适用于非常特定的用例,但通常是代码气味。 -
我建议您从易于阅读的方法开始,运行分析器,并专注于改进整个代码中最慢的部分(不仅仅是阅读您的
Type[]的代码)。
标签: c# code-snippets