获取格式化Int32数字的最佳方法是什么?
假设我有这个o功能:
string o(int x);
Run Code Online (Sandbox Code Playgroud)
这是o需要根据需要返回的值x
x = 0 => o = 00
x = 1 => o = 01
x = 5 => o = 05
x = 10 => o = 10
x = 31 => o = 31
x = 106 => o = 106
Run Code Online (Sandbox Code Playgroud) 我有一个使用以下代码运行的方法:
private void WriteToDb()
{
using (SqlConnection dbConnection = new SqlConnection(_conStr))
{
dbConnection.Open();
using (SqlBulkCopy sbc = new SqlBulkCopy(_conStr))
{
sbc.DestinationTableName = "tblLog";
try
{
sbc.WriteToServer(_tblLog);
}
catch (Exception e)
{
Console.WriteLine(String.Format("{0} Error writing log info: {1} \n {3}", DateTime.Now.ToString(), e.Message, e.StackTrace));
}
}
}
_tblLog.Rows.Clear();
}
Run Code Online (Sandbox Code Playgroud)
我从String.Format()具有以下堆栈跟踪的方法接收异常:
未处理的异常:System.FormatException:索引(从零开始)必须大于或等于零且小于参数列表的大小.在System.String.Format(String格式,对象arg0)的System.String.Format(IFormatProvider提供程序,String格式,Object [] args)的System.Text.StringBuilder.AppendFormat(IFormatProvider提供程序,String格式,Object [] args)处,Object arg1,Object arg2)at MyCompany.MyClient.MySoftware.Logger.WriteToDb()
我真的能看到这个错误的根源.据我所知,我没有在该方法中使用任何集合.我还必须咀嚼这个方法是多线程的,但我再也想不到可能产生的影响.
谢谢!
我正在阅读《Python 编程》,无法弄清楚以下代码中 **D 的含义:
>>> D = {'say': 5, 'get': 'shrubbery'}
>>> '%(say)s => %(get)s' % D
'5 => shrubbery'
>>> '{say} => {get}'.format(**D)
'5 => shrubbery'
Run Code Online (Sandbox Code Playgroud)
我用 google 搜索了 python 中的 **kwargs,大多数结果都在讨论让函数接受任意数量的关键字参数。
这里的 string.format(**D) 看起来不像是让函数接受任意数量的关键字参数的东西,因为我看到字典类型变量 D 只是一个参数。但这是什么意思呢?
也许,我想,事情太简单了。我有一个数据网格,从后面的代码动态添加列。这有效。然后我有带有整数值的列,我希望在列中看到右对齐,但它失败了。我的代码是:
public List<List<int>> IntegerData { get; set; }................
DataGridTextColumn textC = new DataGridTextColumn();
textC.Header = ("Column");
textC.Binding = new Binding(string.Format("[{0}]", i));
textC.Binding.StringFormat = "00000";
Run Code Online (Sandbox Code Playgroud)
最后我有类似的东西:
myDataGrid.Itemssource = IntegerData
Run Code Online (Sandbox Code Playgroud)
使用 textC.Binding.String.Format 的问题是:(首先:看来,stringFormat-LIne 正确重载了前一行)
格式“0”给出一个整数“1”“2”,这是正确的。
格式“00000”给出“00001”“00002”“00003”,这对于字符串格式是正确的,但不是我想要的
但:
格式 "######" 也给出 "1" "2" .. 等等(左对齐,没有前导空格)
由于格式规则我期望(或希望), ##### 是所描述的占位符,结果是 "bbbb1" , "bbbb2" 右对齐。(b 在这里是空白!)
所以绑定似乎正确处理“00000”格式,但不能正确处理“######”格式。有人对这个想法有任何想法或经验吗?(我在互联网上找到的所有其他绑定要复杂得多)
我有一个阵列
ArrayList array = new ArrayList();
array.Add("a");
array.Add("b");
array.Add("c");
Run Code Online (Sandbox Code Playgroud)
我有一个字符串变量refFormat,其格式如下.
string refFormat = "{2} {0}";
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用此格式从数组中获取一串值.以下是我写的内容.
string newStr = String.Format(refFormat,array.ToArray());
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,我得到以下异常.
索引(从零开始)必须大于或等于零且小于参数列表的大小.
我知道这个问题听起来很重复,但我怀疑的是如何从数组中选择其索引是以2和0格式指定的值.请帮忙..
编辑:对不起提出错误的问题.我正在使用arraylist而不是字符串数组我正在尝试相同的.尽管使用ToArray()将其转换为数组,我仍然得到异常.我哪里错了?而且我也不能在这里使用List而不是arraylist,因为数组包含不同类型的数据.请帮帮我..
我希望能够在变量的位置指示器上拆分格式化字符串。它将删除花括号和它们之间指示数字的位置。
所以,字符串:
string format = "{0} field needs to be set to '{1}' when {2}, Fixit. NOW!";
Run Code Online (Sandbox Code Playgroud)
应解析为 3 个字符串。
我们使用像上面的“格式”这样的字符串来构建错误消息。我的目标是添加通用单元测试,可以采用该格式并验证是否生成了与预期格式匹配的错误消息。由于错误生成代码和单元测试引用相同的格式,因此当对消息进行微小更改时,不需要更新单元测试。
在上面的示例中,我将能够通过调用名为 SplitFormatString 的新方法来测试预期结果。
string fieldName = "UserName";
string expectedValue = "Bob";
string condition = "excellence is a must";
string errorMessage = TestFieldValueErrorCase( );
AssertStringContainsAllThese(errorMessage, SplitFormatString(format), fieldName, expectedValue,condition);
Run Code Online (Sandbox Code Playgroud)
经过验证
public static void AssertStringContainsAllThese(string msg, string[] formatChunks, params string[] thingsToFind)
{
foreach (var txt in formatChunks.Concat(thingsToFind))
{
Assert.IsTrue(msg.Contains(txt), "Could not find <<" + txt + ">> …Run Code Online (Sandbox Code Playgroud) string name = "name1";
string country = "country1";
string greet = "Hi {name}, Are you from {country}";
Run Code Online (Sandbox Code Playgroud)
我从数据库字符串中获取了带有一些变量的字符串。我知道string.format()或者$""更换,但这解决不了。
我想要得到的结果就像
string result = $"Hi {name}, Are you from {country}";
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到这个?
我是 Scala 世界的新手,我想使用 String.format() 创建日期格式字符串。我有三个整数值年月日,我想在 yyyy-mm-dd 中更改它。String.format() 需要一个 Anyref 数组,当我通过将整数值传递给它来创建 Array[Anyref] 时,它会抛出以下错误。
错误:(49, 30) 隐式转换的结果类型必须比 AnyRef dd(2) = inputCalendar.get(5) 更具体
我的完整示例是:
val dd = new Array[AnyRef](3);
dd(0) = Integer.valueOf(inputCalendar.get(1))
dd(1) = Integer.valueOf(inputCalendar.get(2) + 1)
dd(2) = inputCalendar.get(5)
println(String.format("%04d-%02d-%02d",dd))
Run Code Online (Sandbox Code Playgroud)
注意:我不想为此使用任何 Date API。
public override string ToString()
{
string token = "something";
foreach (something item in this)
{
something = something + "Some_Point({0},{1}),";
string.Format(something, item.X, item.Y);
}
return something+= "anything";
}
Run Code Online (Sandbox Code Playgroud)
这是ToString()自定义集合的重写方法.这里的问题String.Format是不替换X和Y的值.每当我添加return之前它都会替换String.Format.我刚刚开始学习C#并且不知道是什么导致了这种奇怪的行为.
String.Format("args.{0} = '{1}'", dynaform.RequiredModelName, dynaform.RequiredModel)
Run Code Online (Sandbox Code Playgroud)
预期结果:
args.myVariable = 'someOtherStuff'
Run Code Online (Sandbox Code Playgroud)
实际结果:
args.myVariable = 'someOtherStuff'
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
Html.Raw(String.Format("args.{0} = '{1}'", dynaform.RequiredModelName, dynaform.RequiredModel))
Run Code Online (Sandbox Code Playgroud)
结果:
你调用的对象是空的.
我怎么能告诉String.Format输出'作为'和不作为'?这是很无奈,而且由于现在,我必须避免的String.Format与交易时'或"