是否可以使用方法参数作为数组扩展方法

时间:2015-04-03 22:35:05

标签: c# arrays methods arguments

我试图将一个参数传递给一个方法,然后将该参数用作数组扩展方法,但我正在努力。我的代码是:

//create method
public static void BankChoice(string SearchItem)
{
    //declare variables
    double tempMin = 0;
    int minIndex = 0;

    //set a temporary double as the first index of array
    tempMin = Program.array_SH1[0].SearchItem;

    //start loop to go through whole array
    for (int y = 0; y <= array_SH1.Length; y++)
    {
        //if the temp double is bigger than the array item, 
        //make array item temp double
        if (tempMin > array_SH1[y].SearchItem)
        {
            tempMin = array_SH1[y].SearchItem;
            minIndex = y;
        }
    }
}

然后我会将代码称为:

BankChoice("OpenPrice")

然而,这不起作用。编译器不会接受字符串作为数组扩展,它只是抛出和错误。 无论如何都要解决这个问题,而不必手工操作,并为SearchItem的所有变体创建一个方法

由于

1 个答案:

答案 0 :(得分:2)

您可以做的是提供代表:

public static void BankChoice(Func<ArrayValueType, double> searchBy)
{
    //...
    // use the delegate to evaluate the result for each time you need to get the value from an item in your array.
    tempMin = searchBy(Program.array_SH1[0]);
    //...
}

其中ArrayValueType是数组中对象的类型。然后用

调用它
BankChoice(x => x.OpenPrice);

这将允许您指定要搜索的属性,并且将以类型安全的方式完成。目前唯一的限制是该财产可以转换为double。对于泛型类型的属性,可以绕过它,并且根据您的需求,有多种方法可以做到这一点。