C#插值字符串中的可选参数是什么?

时间:2015-09-17 00:34:48

标签: c# .net string-interpolation c#-6.0

插值字符串是C#6.0的新功能之一。

根据MSDN,嵌入式C#表达式的语法可以包含一个可选的逗号分隔值,在documentation中视为<optional-comma-field-width>

不幸的是我没有找到这个字段的用途。

从名称可以看出,这个值设置了“插值”字段的最大大小,但是当我尝试以下表达式时:

var p = Process.GetCurrentProcess();
Console.WriteLine($"Process name is {p.ProcessName, 5}");

我得到以下输出:

Process name is LINQPad.UserQuery

2 个答案:

答案 0 :(得分:45)

用于该字段的最小宽度,而不是最大。由于您的字符串长于您为宽度指定的5个字符,因此该字段将扩展为字符串的长度。您会更长时间地看到差异:

var p = Process.GetCurrentProcess();
$"Process name is {p.ProcessName, 50}".Dump();

的产率:

Process name is                                  LINQPad.UserQuery

正字段大小是右对齐的;负字段大小是左对齐的。

MSDN的Composite Formatting页面上的文档更好:

  

可选的对齐组件是一个有符号整数,表示   首选格式化字段宽度。如果对齐值较小   比格式化字符串的长度,对齐被忽略而且   格式化字符串的长度用作字段宽度。该   如果对齐为正,则字段中的格式化数据是右对齐的   如果对齐为负,则左对齐。如果需要填充,   使用了空白区域。如果指定了对齐,则需要逗号。

答案 1 :(得分:17)

数字是对齐,记录在对齐组件here中。

  

如果对齐,则字段中的格式化数据是右对齐的   如果对齐为负,则为正向和左对齐。

在您的示例中,如果{{1>}字符长度小于 public interface RoomListingAPI { @POST("/api/fetch") void getRoomListing(@Header("x-parse-session-token") String token, @Field("YOURFIELDNAME") String json); } //This method generates your json private String yourJSON(){ JSONObject jsonRoot = new JSONObject(); JSONObject jsonObject1 = new JSONObject(); JSONArray jsonArray = new JSONArray(); JSONObject jsonObject2 = new JSONObject(); try{ jsonArray.put(jsonObject2); jsonObject2.put("duration", "12"); jsonObject1.put("reg", "IND"); jsonObject1.put("or", jsonArray); jsonRoot.put("q", jsonObject1); jsonRoot.put("sort", "recent"); }catch (JSONException e){ e.printStackTrace(); } return jsonRoot.toString(); } RoomListingAPI apiservice = restadapter.providesRestAdapter().create(RoomListingAPI.class); apiservice.getRoomListing("your_header_token",yourJSON())... ,则 alignment 将使用空格填充p.ProcessName。如果字符串长度小于 alignment 的绝对值(如示例所示),则 alignment 无效。

示例

5

<强>结果

var text = "MyText";
Console.WriteLine($"x{text}x");
Console.WriteLine($"x{text, 3}x");
Console.WriteLine($"x{text, 10}x");
Console.WriteLine($"x{text, -10}x");