代码片段:创建一个“;别名“;为了别的
本文关键字:别名 一个 片段 创建 代码 | 更新日期: 2023-09-27 18:29:37
我一直在寻找一种类似的方法,用预处理器为C中可能存在的其他东西创建别名(这个问题有点类似,在那里找不到任何有用的东西)。
这就是问题所在:我有一个接收数组的方法,但数组的每个位置都有特定的含义,就像它们中不同的参数有特定的名称一样。我想做的是通过使用这些特定的名称使代码更容易读取(和写入),但另一方面,我不想创建另一个方法调用(如示例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]
}
我无法更改方法签名,因为它在dellegate中使用,Type
是固定的。
下一个例子稍微好一点,但仍然不是最佳的:
void OriginalMethodSignature(Type[] values)
{
// implementation using values[specificName1] ... values [specificNameN]
}
const int specificName1 = 0;
const int specificName2 = 1;
...
const int specificNameN = n-1;
有什么方法可以为此创建一个代码段吗?如果是,情况会怎样?
没有任何内置的方法来做你不想做的事情,因为你根本不应该这么做。您应该使用具有属性的对象,而不是数组。
无论如何,您可以制作一个封装数组的对象,以便属性将数组用作存储:
public class NamedObject {
private Type[] _values;
public NamedObject(Type[] values) {
_values = values;
}
public SpecificName1 { get { return _values[0]; } set { _values[0] = value; } }
public SpecificName2 { get { return _values[1]; } set { _values[1] = value; } }
public SpecificName3 { get { return _values[2]; } set { _values[2] = value; } }
public SpecificName4 { get { return _values[3]; } set { _values[3] = value; } }
public SpecificName5 { get { return _values[4]; } set { _values[4] = value; } }
public SpecificName6 { get { return _values[5]; } set { _values[5] = value; } }
}
现在您可以使用对象访问数组:
void OriginalMethodSignature(Type[] values) {
NamedObject obj = new NamedObject(values);
// get a value
Type x = obj.SpecificName4;
// set a value
obj.SpecificName2 = x;
}
创建一个专用的class
或struct
,并将数组解析到其中。
public class MyClassOfStuff
{
Type SpecificName1 {get;set;}
Type SpecificName2 {get;set;}
public static MyClassOfStuff Parse(Type[] value)
{
Type specificName1 = values[0];
Type specificName2 = values[1];
...
Type specificNameN = values[n];
}
}
void OriginalMethodSignature(Type[] values)
{
var mystuff = MyClassOfStuff.Parse(values);
}