标签: string.format

String.Format还是不?

重复来自:字符串输出:C#中的格式或concat?

特别是在使用String.Format的C#世界中,一切都很常见,通常作为VB.NET开发人员,除非我必须*我不是String.Format,

我更喜欢正常的字符串连接,例如:

V1 = V2 & "test-x" & V3 & "-;"
Run Code Online (Sandbox Code Playgroud)

对我而言,这比这更好:

V1 = String.Format("{0} test-x {1} -;", V2, V3)
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?或者这仅仅是个人偏好?

使用String.Format的原因(来自答案)(我会尽量保持最新)

  • 如果使用字符串格式,本地化会更容易
  • 显然,更改输入格式更容易
  • 它更具可读性(但这是个人的)
  • 更好的性能

**有时我需要动态更改样式或替换东西然后我使用String.Format*

.net format string.format coding-style

6
推荐指数
2
解决办法
2535
查看次数

String.Format不格式化字符串

似乎String.Format不会将字符串格式化为输入.我做错了什么,或者这只是本地行为?

输入:0.37

这不起作用.

string x = String.Format("{0:P}", myString)
Run Code Online (Sandbox Code Playgroud)

产量:0.37

这样做.

string x = String.Format("{0:P}", Convert.ToDecimal(myString))
Run Code Online (Sandbox Code Playgroud)

产量:37.00%

.net string.format

6
推荐指数
1
解决办法
2269
查看次数

使用.NET字符串格式,如何格式化字符串以显示空(空字符串)为零(0)?

我在ASP.NET Datagrid中使用DataBinder.Eval表达式,但我认为这个问题一般适用于.NET中的String格式.客户已请求如果字符串的值为0,则不应显示该字符串.我有以下黑客来完成这个:

<%# IIf(DataBinder.Eval(Container.DataItem, "MSDWhole").Trim = "0", "", 
    DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0}"))  %>
Run Code Online (Sandbox Code Playgroud)

我想更改{0:N0}格式表达式,以便我可以消除IIf语句,但找不到任何有效的.

.net formatting string.format string-formatting

6
推荐指数
1
解决办法
4703
查看次数

静态扫描所有C#代码的字符串格式参数错误

我们使用log4net库和字符串格式方法调用编写了数千条不同的日志消息.

这样做的一个问题是,如果字符串格式参数(如{0},{1},{2}具有正确的方法参数计数),则仅在运行时才会出现错误.

许多这些方法仅在自动测试期间很少或从未发生的错误条件下调用.

那么是否有任何工具可以扫描所有C#代码并通知任何字符串格式问题?

注意:我在静态代码分析中看到了许多其他问题,这些问题看似重复,但在查看其中一些工具后,它们似乎无法处理这种特定情况.

如果没有什么真正的好处,我们将在内部编写此工具.

c# string.format static-analysis

6
推荐指数
1
解决办法
373
查看次数

C# - 强制String.Format使用小数和从不逗号

基本上我意识到我的应用程序使用逗号而不是小数,我从不想允许这个.谁知道我怎么纠正?我无法通过谷歌找到一个强制小数的东西,它只是强迫逗号.

         return String.Format("{0}f, {1}f, {2}f, {3}f, {4}f, {5}f, {6}f, {7}f, {8}f, {9}f, {10}f, {11}f, {12}f, {13}f, {14}f, {15}f", M.M11, M.M12, M.M13, M.M14, M.M21, M.M22, M.M23, M.M24, M.M31, M.M32, M.M33, M.M34, M.OffsetX, M.OffsetY, M.OffsetZ, M.M44);
Run Code Online (Sandbox Code Playgroud)

c# string.format

6
推荐指数
1
解决办法
938
查看次数

如何转义格式字符串?

是否可以使用Python的str.format(key=value)语法来仅替换某些键.

考虑这个例子:

my_string = 'Hello {name}, my name is {my_name}!'

my_string = my_string.format(name='minerz029')
Run Code Online (Sandbox Code Playgroud)

返回

KeyError: 'my_name'
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

python string string.format

6
推荐指数
3
解决办法
2920
查看次数

解释日期:Console.Writeline与string.Format

给出以下C#代码:

var dt = DateTime.Now;
Console.WriteLine("{0:MM/dd/yy} ... {1}", dt, string.Format("{0:MM/dd/yy}", dt));
Run Code Online (Sandbox Code Playgroud)

...当短日期(在Windows 7下Control Panel -> Region and Language -> Additonal Settings -> Date)设置为美国标准" M/d/yyyy,"时,我得到:

06/17/14 ... 06/17/14
Run Code Online (Sandbox Code Playgroud)

但是,当我将短日期更改为" ddd dd MMM yyyy,"时,我得到了这个:

06/17/14 ... 06 17 14
Run Code Online (Sandbox Code Playgroud)

我的印象是,Console.WriteLine并且string.Format始终将字符串格式化的DateTime值相同.这种差异的解释是什么?

编辑:看起来这只发生在标准的单元测试输出(Visual Studio),这是我最初看到的问题.当代码在控制台应用程序中执行时,输出为06 17 14 ... 06 17 14.

.net c# string.format datetime console.writeline

6
推荐指数
1
解决办法
677
查看次数

在多行上分解字符串文字

是否有办法打破一行代码,以便尽管在java中的新行上它被读取为连续的?

public String toString() {

  return String.format("BankAccount[owner: %s, balance: %2$.2f,\
    interest rate: %3$.2f,", myCustomerName, myAccountBalance, myIntrestRate);
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码,当我在一行上执行所有操作时,一切都很有效,但是当我尝试在多行上执行此操作时,它不起作用.

在python中,我知道你使用\来开始在新行上键入,但在执行时打印为一行.

Python中的一个例子来澄清.在python中,这将使用反斜杠或()在一行上打印:

print('Oh, youre sure to do that, said the Cat,\
 if you only walk long enough.')
Run Code Online (Sandbox Code Playgroud)

用户会将此视为:

Oh, youre sure to do that, said the Cat, if you only walk long enough.
Run Code Online (Sandbox Code Playgroud)

在java中有类似的方法吗?谢谢!

java string string.format

6
推荐指数
1
解决办法
8047
查看次数

如何确定复合格式字符串是否无效?

根据文档,String.Format将抛出一个FormatExceptionif(A)格式字符串无效或(B)格式字符串包含在args数组中找不到的索引.

我希望能够确定任何字符串和参数数组中哪些(如果有)这些条件失败.

有什么能帮我的吗?谢谢!

.net c# string.format

5
推荐指数
1
解决办法
1088
查看次数

String.Format() 带有前导零的十六进制不适用于第二个参数

我面临着一个奇怪的问题String.Format()。我需要格式化两个带有前导零的十六进制数字以填充最多 8 位数字。但是,它仅适用于第一个参数 ( {0:X8})。对于第二个参数 ( {1:X8}),仅打印“X8”。

这是我的代码:

public struct DataDirectory
{
    public uint VirtualAddress
    {
        get;
        internal set;
    }

    public uint Size
    {
        get;
        internal set;
    }

    public override string ToString()
    {
        return String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}}}", VirtualAddress, Size);
    }
}
Run Code Online (Sandbox Code Playgroud)

调试器输出打印以下内容:

调试器输出

编辑:如果我删除格式字符串开头和结尾处的大括号,它似乎可以工作,但随后我会丢失返回的字符串中的大括号ToString()(调试器仍将它们添加到 QuickWatch 窗口中):

return String.Format("VirtualAddress=0x{0:X8},Size=0x{1:X8}", VirtualAddress, Size);
Run Code Online (Sandbox Code Playgroud)

是否可以用 格式化两个十六进制数String.Format()

c# string.format

5
推荐指数
1
解决办法
3460
查看次数