标签: string.format

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

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

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

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

.net c# string.format

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

C# String.Format 可选参数

我想string.Formatoptional parameters

public static void Main(string[] args)
{
    // Your code goes here
    // Console.WriteLine(string.Format("{0} {1}", "a", "b"));
    Console.WriteLine(string.Format("{0} {1}", "a"));
}
Run Code Online (Sandbox Code Playgroud)

例如,参数{1}是可选的并具有默认值

你能帮我做这个吗?

c# parameters string.format optional

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

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
查看次数

Resharper - 将字符串插值修改回 string.Format

几天前,我按照 ReSharper 的建议将所有 string.Format 修改为字符串插值。我接受了这个建议,并在整个解决方案中对其进行了更改。

因为我们在一个团队中工作,所以我讨论了这个变化(之后,当损坏完成时),我们决定回到 string.Format 以确保没有损坏。

现在,有没有办法告诉 ReSharper 将我所有的字符串插值改回 string.Format 的?我希望有。

笔记:

  • 使用 Visual Studio 2015
  • 使用 ReSharper 2017.1.3
  • 更改为插值后没有任何问题,但这只是出于美学原因我们决定保留我们的 string.Format 的

有一种简单的方法来做到这一点会很棒,而不仅仅是撤消我对 TFS 的检查(每个文件的文件,因为我想保留其他更改)。

c# string resharper string.format string-interpolation

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

String.Format 在 HTML 电子邮件模板的样式部分失败

我正在使用 Bodybuilder 和邮件发送服务发送 HTML 电子邮件模板。我用这个链接学习。

https://www.c-sharpcorner.com/article/send-email-using-templates-in-asp-net-core-applications/

无论如何,我使用外部服务 ( https://topol.io/ )创建了我的电子邮件模板。

当我尝试将生成的 HTML 文件与第一个链接中引用的 String.FOrmat 命令一起使用时,它给了我错误。我终于发现是这部分代码导致 String.Format 失败。

这是我通常与其他 HTML 模板一起使用的 c# 代码:

using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
            {
                builder.HtmlBody = SourceReader.ReadToEnd();
            }

string messagebody = string.Format(builder.HtmlBody,
                    //Not important
                    );
Run Code Online (Sandbox Code Playgroud)

现在,HTML 中的这种样式代码会导致 String.Format 崩溃(或 bodybuilder,我不确定究竟是哪个问题存在,它在 string.format 处失败)。

<style type="text/css">
        #outlook a {
            padding: 0;
        }

        .ReadMsgBody {
            width: 100%;
        }

        .ExternalClass {
            width: 100%;
        }

            .ExternalClass * {
                line-height: 100%;
            }

        body {
            margin: 0;
            padding: 0;
            -webkit-text-size-adjust: 100%;
            -ms-text-size-adjust: 100%; …
Run Code Online (Sandbox Code Playgroud)

html c# string.format .net-core bodybuilder.js

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

String.format() 作为常量表达式

有什么方法可以让下面的表达式作为常量表达式进行计算?如果有帮助的话,我正在使用 Java 11。

String.format("hello %1$s","world");
Run Code Online (Sandbox Code Playgroud)

java string.format

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

绑定到 Entry.Text 的属性设置器无限循环

这真让我抓狂。几个小时以来,我一直在寻找问题的根源,但我开始怀疑这不是我的逻辑问题......也许我错了。


问题描述

我有一个简单的Entry。它的文本属性绑定到与类型的属性视图模型。同时,我订阅了Unfocused 事件,EventHandler只是将entry.Text属性设置为"1.0"(实际上我可以重现 x.y0 的问题,即最终数字为 0 的任何小数)。如果现在我在条目中写入任何内容(“1”或“1”或“1.0”除外!!!)并离开条目(通过点击外部或点击完成)以便Unfocused触发,应用程序将变得无响应。

注意:我知道entry.Text = 1.0在事件处理程序中设置听起来有点奇怪。事实是,我通过尝试entry.Text按如下方式格式化值时遇到了这个问题。

if (double.TryParse(entry.Text, out double result))
{
    entry.Text = String.Format("{0:F2}", result);
}
Run Code Online (Sandbox Code Playgroud)

String.Format尝试将小数四舍五入到两位小数。如果我给出6.999的预期值应该是7.00,但应用程序反而变得无响应。


重现问题的步骤

  1. 创建空白的Xamarin.Forms 项目
  2. 删除默认标签MainPage.xaml中文件以包括以下条目,而不是:
<StackLayout>
    <Entry Text="{Binding Weight}"
    Unfocused="entry_Unfocused"/>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
  1. 在后面的代码中添加下面的EventHandler …

c# double string.format xamarin.android xamarin.forms

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

如何在字符串中包含数字以不转换为另一种语言(例如阿拉伯语)

我有这样的代码..

string text1 = "more text";
string text2 = string.Format("some text plus {0}", text1);
Run Code Online (Sandbox Code Playgroud)

我将其转换为阿拉伯语:

string text1 = "?????? ?? ????";
string text2 = string.Format("??? ???? ???????? ??? {0}", text1);
Run Code Online (Sandbox Code Playgroud)

到目前为止没有问题!

然后我将计算机的语言从英语切换到阿拉伯语并查看代码,数字已自动更新为阿拉伯数字......

string text1 = "?????? ?? ????";
string text2 = string.Format("{.} ??? ?????? ???????? ???", text1);
Run Code Online (Sandbox Code Playgroud)

(我不得不使用句点来捏造这一点,但是对于这个例子来说,0 的阿拉伯符号看起来足够相似)。

问题是,当 Windows 选择的语言是阿拉伯语时,我收到字符串格式异常错误,因为 Format 命令无法识别阿拉伯语符号为零。

具体来说,我的问题是:即使在非拉丁语言中,您如何确保输入的零仍然是拉丁数字?或者我怎样才能让它正常工作而不会出错?

编辑:

直接从 IDE 剪切和粘贴:第一个 Windows 设置为英语,第二个图片,相同的代码,阿拉伯语...

英语

阿拉伯

c# string.format

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

具有null格式的String.Format

谁能解释为什么会发生以下情况:

String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
                                   // Value cannot be null. 
                                   // Parameter name: format
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# null string.format

4
推荐指数
1
解决办法
3892
查看次数

String.Format对十进制值的阻塞?

我希望下面的两个测试(为NUnit编写)都能通过,但是Decimal版本失败了,"System.FormatException:Format说明符无效",Double版本也是如此.我无法弄清楚为什么.有人可以光明吗?

谢谢; 邓肯

[Test]
public void Integer_Format_Hex()
{
    //Assume
    Int32 myValue = 11101110;

    //Arrange

    //Act

    //Assert
    Assert.That( String.Format( "0x{0:X8}" , myValue ) , Is.EqualTo( "0x00A963B6" ) );
}

[Test]
public void Decimal_Format_Hex()
{
    //Assume
    Decimal myValue = 11101110m;

    //Arrange

    //Act

    //Assert
    Assert.That( String.Format( "0x{0:X8}" , myValue ) , Is.EqualTo( "0x00A963B6" ) );
}

[Test]
public void Decimal_Format_Hex2()
{
    //Assume
    Decimal myValue = 11101110m;

    //Arrange

    //Act

    //Assert
    Assert.That( myValue.ToString( "X" ) , Is.EqualTo( "00A963B6" ) );
}
Run Code Online (Sandbox Code Playgroud)

string.format hex decimal

4
推荐指数
1
解决办法
2930
查看次数