c#中的极简主义数组创建

时间:2009-05-29 05:24:26

标签: c# arrays

我一直希望能够使用下面这一行,但C#编译器不会让我这么做。对我而言,对于我想要的东西,这似乎是显而易见和明确的。

myString.Trim({'[', ']'});

我可以使用以下方式实现我的目标:

myString.Trim(new char[]{'[', ']'});

所以我不知道有没有其他方法可以做到更接近第一种方法?

4 个答案:

答案 0 :(得分:8)

string.Trim(...)方法实际上需要params个参数,所以,为什么不只是调用:

myString.Trim('[', ']');

答案 1 :(得分:6)

其他人专注于具体的例子(并使用它是一个参数数组的事实),但你可能对C#3的隐式输入感兴趣。你可以写了:

myString.Trim(new[] {'[', ']'});

完全像你一样紧凑,因为你仍然需要表达“我想要创建一个数组”的概念,除非你正在编写一个变量初始化器,但是它的类型数组是从内容中推断出来的。

这个大用例是匿名类型:

var skeets = new[] {
   new { Name="Jon", Age=32 },
   new { Name="Holly", Age=33 },
   new { Name="Tom", Age=5 },
   new { Name="Robin", Age=3 },
   new { Name="William", Age=3 }
};

这里无法写出该类型的名称,因为它没有名称(在C#中可以表达)。

关于您的具体示例还有另外一点 - 如果您要经常使用它(即经常调用Trim方法),您可能希望每次都避免创建新数组:

private static readonly char[] SquareBrackets = {'[', ']'};

public void Whatever() {
    ...
    foo = myString.Trim(SquareBrackets);
    ...
}

答案 2 :(得分:3)

这也会起作用......

myString.Trim( '[',']' );

注意Trim定义中的params声明,它允许您传递任意数量的参数并将它们作为数组。

答案 3 :(得分:3)

你也可以试试这个:

myString.Trim("[]".ToCharArray());