如何缩短C#中方法的用法?

时间:2016-11-04 17:21:45

标签: c# methods

我有很多像这样的字符串变量;

string x1, x2, x3, x4, x5, x6, x7, x8;

是否可以缩短此代码

method(x1);
method(x2);
method(x3);
method(x4);
method(x5);
method(x6);
method(x7);
method(x8);

所以我可以使用这样的东西(下面的内容不起作用):

for(int i = 1; i <= 8; i++)
{
    method("x" + i);
}

提前致谢!

5 个答案:

答案 0 :(得分:4)

对所有这些字符串使用数组:

string[] data = new []
{
    "string1",
    "string2",
    "string3",
    "string4",
    x1,
    x2,
    x3,
    x4
};

foreach(var item in data)
{
    method(item);
}

对于数组它是相同的,只有一组数组:

var data = new List<string[]>
{
    new [] {"1","2","3"},
    new [] {"a","b","c"},
};

foreach(var item in data)
{
    method2(item); //notice that this method must get as a parameter a string[]
}

答案 1 :(得分:1)

其他答案显示如何遍历值并为每个值调用方法。如果你可以重写方法,另一种方法是让它接受多个参数。

static void YourMethod(params string[] values)
{
    foreach (var value in values)
    {
        // Do your work
    }
}

你可以像这样使用它:

YourMethod(x1, x2, x3, x4);

答案 2 :(得分:0)

根据Gilad的答案,您可以使用List和ForEach:

var data = new List<string>
{
    "string1",
    "string2",
    "string3",
    "string4",
    x1,
    x2,
    x3,
    x4
};

data.ForEach(x => method(x));

甚至更短:

data.ForEach(method);

答案 3 :(得分:0)

您可以使用上述foreach循环,或者以对我来说看起来更干净的方式,使用Extension Method作为您正在使用的对象类型。如果您经常使用该方法,但这仍然有效,这是很好的。

static class Program
{
    static void Main()
    {
        int[] test = { 1, 12, 13, 11, 31, 41, 21};
        test.CycleArray();
    }
    public static void CycleArray(this int[] myArr)
    {
        if (myArr.Length > 0)
            foreach (int x in myArr)
                Console.WriteLine(x);
    }

然后,您可以在该类型的任何对象上调用该方法,而无需再编写代码。

test.CycleArray();

每次获得int []类型的对象都可以在没有附加代码的情况下工作。

如果您不愿意使用LINQ,那就是这种方式。在最后一个案例中

MyArray.ForEach(x => x+="i");

如你所说,假设你的代码不起作用,我们会在一行中做同样的事情。

答案 4 :(得分:0)

您可以使用下面的字符串和操作字典

 Dictionary<string, Action<string>> _mapOfMethods = new Dictionary<string,Action<string>> { { "TestString1", Method1 }, {"TestString2", Method2 }};

然后你可以使用下面的foreach语句

        foreach (var item in _mapOfMethods)
        {
            item.Value(item.Key);
        }