代码段:为其他内容创建“别名”

时间:2013-08-30 17:45:53

标签: c# code-snippets

我一直在寻找一种类似的方法来为其他东西创建一个别名,比如它可能在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]
    }

我无法更改方法签名,因为它在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;

有没有办法为此目的创建代码段?如果是,那将是怎样的?

2 个答案:

答案 0 :(得分:3)

没有任何内置的方法可以做你想做的事,因为你根本不应该这样做。您应该使用具有属性而不是数组的对象。

无论如何,您可以创建一个封装数组的对象,以便属性将该数组用作存储:

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;
}

答案 1 :(得分:2)

创建一个专用的classstruct,并将数组解析为它。

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);
}