插值字符串是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
答案 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");