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

sip*_*wiz 0 c# arrays

我一直希望能够使用下面的行,但C#编译器不会让我.对我而言,我想要的东西似乎显而易见且毫不含糊.

myString.Trim({'[', ']'});
Run Code Online (Sandbox Code Playgroud)

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

myString.Trim(new char[]{'[', ']'});
Run Code Online (Sandbox Code Playgroud)

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

jer*_*jvl 8

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

myString.Trim('[', ']');
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

其他人专注于特定的例子(并使用它是一个参数数组的事实),但你可能对C#3的隐式类型感兴趣.你可以写:

myString.Trim(new[] {'[', ']'});
Run Code Online (Sandbox Code Playgroud)

没有相当的紧凑,你后,你仍然需要表达的"我要创建一个数组",除非你正在编写一个变量初始化的概念,但数组类型是从内容推断.

这个用例的大用途是匿名类型:

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 }
};
Run Code Online (Sandbox Code Playgroud)

在这里你不能写出类型的名称,因为它没有名称(在C#中可以表达).

关于你的具体例子的另一点 - 如果你经常使用它(即经常调用Trim方法),你可能想避免每次都创建一个新的数组:

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

public void Whatever() {
    ...
    foo = myString.Trim(SquareBrackets);
    ...
}
Run Code Online (Sandbox Code Playgroud)