根据文档,String.Format将抛出一个FormatExceptionif(A)格式字符串无效或(B)格式字符串包含在args数组中找不到的索引.
我希望能够确定任何字符串和参数数组中哪些(如果有)这些条件失败.
有什么能帮我的吗?谢谢!
我希望得到一些关于如何加速以下功能的建议.具体来说,我希望找到一种更快的方法来将数字(大多数是双数,IIRC那里有一个int)转换为存储为Listview子项的字符串.目前,此功能需要9秒才能处理16个订单!绝对是疯了,特别是考虑到除了处理DateTimes的调用之外,它只是字符串转换.
我认为这是列表视图项目的实际显示速度很慢,所以我做了一些研究,发现将所有子项添加到数组并使用Addrange远比一次添加项目快.我实施了改变,但没有更好的速度.
然后,我在每条线路周围添加了一些秒表,以缩小导致减速的确切原因; 不出所料,对datetime函数的调用是最大的减速,但我很惊讶地看到string.format调用也非常慢,并且考虑到它们的数量,占我的大部分时间.
private void ProcessOrders(List<MyOrder> myOrders)
{
lvItems.Items.Clear();
marketInfo = new MarketInfo();
ListViewItem[] myItems = new ListViewItem[myOrders.Count];
string[] mySubItems = new string[8];
int counter = 0;
MarketInfo.GetTime();
CurrentTime = MarketInfo.CurrentTime;
DateTime OrderIssueDate = new DateTime();
foreach (MyOrder myOrder in myOrders)
{
string orderIsBuySell = "Buy";
if (!myOrder.IsBuyOrder)
orderIsBuySell = "Sell";
var listItem = new ListViewItem(orderIsBuySell);
mySubItems[0] = (myOrder.Name);
mySubItems[1] = (string.Format("{0:g}", myOrder.QuantityRemaining) + "/" + string.Format("{0:g}", myOrder.InitialQuantity));
mySubItems[2] = (string.Format("{0:f}", myOrder.Price));
mySubItems[3] = (myOrder.Local);
if (myOrder.IsBuyOrder)
{
if …Run Code Online (Sandbox Code Playgroud) 我面临着一个奇怪的问题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()?
这是我的问题及其解决这个问题的方法..
Em试图在不同的活动之间传递textview值,并且他们遇到了问题.当我执行代码时,应用程序在打开StudentActivity时崩溃,但随后显示正确的结果......代码
LoginActivity.java
int a = Integer.parseInt(textView.getText().toString());
Intent i = new Intent(LoginActivity.this, StudentActivity.class);
i.putExtra("level", a);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
StudentActivity.java
textView.setText(Integer.toString(getIntent().getExtras().getInt("level")));
Run Code Online (Sandbox Code Playgroud)
IN studentActivity,Integer.toString(getIntent().getExtras().getInt("level"))=>此行表示数字格式不考虑区域设置.请考虑使用String.format.请提供一些代码..任何帮助都将得到真正的赞赏!!
几天前,我按照 ReSharper 的建议将所有 string.Format 修改为字符串插值。我接受了这个建议,并在整个解决方案中对其进行了更改。
因为我们在一个团队中工作,所以我讨论了这个变化(之后,当损坏完成时),我们决定回到 string.Format 以确保没有损坏。
现在,有没有办法告诉 ReSharper 将我所有的字符串插值改回 string.Format 的?我希望有。
笔记:
有一种简单的方法来做到这一点会很棒,而不仅仅是撤消我对 TFS 的检查(每个文件的文件,因为我想保留其他更改)。
我想使用str.format()方法,如下所示:
my_str = "Username: {username}, User data: {user_data.attribute}".format(**items)
Run Code Online (Sandbox Code Playgroud)
并将其应用于项目,如下所示:
items = {
"username" : "Peter",
"user_data" : {
"attribute" : "foo"
}}
Run Code Online (Sandbox Code Playgroud)
这是可行的,如果是的话,那怎么样?如果没有,我对你推荐的方法感兴趣.
我正在使用 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 设置为英语,第二个图片,相同的代码,阿拉伯语...