根据文档,String.Format将抛出一个FormatExceptionif(A)格式字符串无效或(B)格式字符串包含在args数组中找不到的索引.
我希望能够确定任何字符串和参数数组中哪些(如果有)这些条件失败.
有什么能帮我的吗?谢谢!
我想string.Format与optional 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}是可选的并具有默认值
你能帮我做这个吗?
我面临着一个奇怪的问题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()?
几天前,我按照 ReSharper 的建议将所有 string.Format 修改为字符串插值。我接受了这个建议,并在整个解决方案中对其进行了更改。
因为我们在一个团队中工作,所以我讨论了这个变化(之后,当损坏完成时),我们决定回到 string.Format 以确保没有损坏。
现在,有没有办法告诉 ReSharper 将我所有的字符串插值改回 string.Format 的?我希望有。
笔记:
有一种简单的方法来做到这一点会很棒,而不仅仅是撤消我对 TFS 的检查(每个文件的文件,因为我想保留其他更改)。
我正在使用 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) 有什么方法可以让下面的表达式作为常量表达式进行计算?如果有帮助的话,我正在使用 Java 11。
String.format("hello %1$s","world");
Run Code Online (Sandbox Code Playgroud) 这真让我抓狂。几个小时以来,我一直在寻找问题的根源,但我开始怀疑这不是我的逻辑问题......也许我错了。
我有一个简单的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,但应用程序反而变得无响应。
<StackLayout>
<Entry Text="{Binding Weight}"
Unfocused="entry_Unfocused"/>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
我有这样的代码..
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 设置为英语,第二个图片,相同的代码,阿拉伯语...
谁能解释为什么会发生以下情况:
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)
谢谢.
我希望下面的两个测试(为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)