我想知道是否存在在string.Format中格式化NULL值的语法,例如Excel使用的语法
例如,使用Excel我可以指定格式值{0:#,000.00;-#,000.00,NULL},这意味着如果为正数则将数值显示为数字格式,如果为负数则显示在括号中的数字格式,如果值为null则显示为NULL
string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);
Run Code Online (Sandbox Code Playgroud)
编辑
我正在寻找所有数据类型的格式NULL/ Nothing值,而不仅仅是数字类型.
我的例子实际上是不正确的,因为我错误地认为Excel使用第3个参数,如果值为NULL,但它实际上在值为0时使用.我将它留在那里因为它是我能想到的最接近我的东西希望能做到.
我希望避免使用null合并操作符,因为我正在编写日志记录,并且数据通常不是字符串
写一些类似的东西要容易得多
Log(string.Format("Value1 changes from {0:NULL} to {1:NULL}",
new object[] { oldObject.SomeValue, newObject.SomeValue }));
Run Code Online (Sandbox Code Playgroud)
而不是写
var old = (oldObject.SomeValue == null ? "null" : oldObject.SomeValue.ToString());
var new = (newObject.SomeValue == null ? "null" : newObject.SomeValue.ToString());
Log(string.Format("Value1 changes from {0} to {1}",
new object[] { old, new }));
Run Code Online (Sandbox Code Playgroud) 我正在尝试格式化Html.EditorFor文本框以进行货币格式化,我试图将它基于TextBoxFor上的此线程String.Format.但是,我的文本仍显示为0.00,没有货币格式.
<div class="editor-field">
@Html.EditorFor(model => model.Project.GoalAmount, new { @class = "editor- field", Value = String.Format("{0:C}", Model.Project.GoalAmount) })
Run Code Online (Sandbox Code Playgroud)
我正在做的是代码,这里是编辑器字段div中包含的网站中该字段的html.
<input class="text-box single-line valid" data-val="true"
data-val-number="The field Goal Amount must be a number."
data-val-required="The Goal Amount field is required."
id="Project_GoalAmount" name="Project.GoalAmount" type="text" value="0.00">
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢!
下面的代码一直给我一个错误,说输入字符串的格式不正确,但我很确定它是对的,不是吗?
int id = 112;
String[] newData = { "1", "2", "21", "reidb", "reidb", "reidb", "reidb", "aa",
"Some description", "11", "2012-02-28", "2012-01-29", "true", "1", "1",
"true", "note note note", "true", "1", "2011-12-03", "45"};
String data = "{ cmd: \"save magellan deal\", data: { id: {0} , AId: {1}, " +
"CId: {2}, CCId:{3}, LA: \"{4}\", BA: \"{5}\" , " +
"LSA: \"{6}\" , BSA: \"{7}\" , \"path: \"{8}\"," +
"dscp: \"{9}\", SI: \"{10}\", CD: \"{11}\", " +
"period: \"{12}\", IsStatic: …Run Code Online (Sandbox Code Playgroud) 考虑toString()bean 的自定义实现:
@Override
public String toString() {
String.format("this is %s", this.someField);
}
Run Code Online (Sandbox Code Playgroud)
this is null如果someField为null,则产生if .
有没有办法将null空值参数的默认字符串表示形式覆盖到另一个文本,即? 没有replaceAll(...)在toString方法中显式调用?
注意:bean继承自可以实现的超类Formattable(http://docs.oracle.com/javase/7/docs/api/java/util/Formattable.html),但我似乎并不理解如何制作这项工作.
编辑:为了举例,该片段被过度简化,但我不是在寻找三元运算符解决方案,someField==null ? "?" : someField因为:
toString()因此检查所有字段过于繁琐且不流畅.相反,可以使用Formattable界面或有一些自定义Formatter(这是final顺便说一句)完成任何事情?
我想做一些条件格式的字符串.我知道您可以按如下方式对整数和浮点数进行一些条件格式化:
Int32 i = 0;
i.ToString("$#,##0.00;($#,##0.00);Zero");
Run Code Online (Sandbox Code Playgroud)
如果变量为正,负或零,则上述代码将产生三种格式之一.
我想知道是否有任何方法可以使用字符串参数的部分.对于一个具体的,但人为的例子,我将寻找替换以下代码中的"if"检查:
string MyFormatString(List<String> items, List<String> values)
{
string itemList = String.Join(", " items.ToArray());
string valueList = String.Join(", " values.ToArray());
string formatString;
if (items.Count > 0)
//this could easily be:
//if (!String.IsNullOrEmpty(itemList))
{
formatString = "Items: {0}; Values: {1}";
}
else
{
formatString = "Values: {1}";
}
return String.Format(formatString, itemList, valueList);
}
Run Code Online (Sandbox Code Playgroud) 而不是使用{0} {1},等我想要使用{title}.然后以某种方式填充该数据(下面我使用了a Dictionary).此代码无效并引发异常.我想知道我是否能做类似于我想要的事情.使用{0 .. N}不是问题.我只是好奇而已.
Dictionary<string, string> d = new Dictionary<string, string>();
d["a"] = "he";
d["ba"] = "llo";
d["lol"] = "world";
string a = string.Format("{a}{ba}{lol}", d);
Run Code Online (Sandbox Code Playgroud) 我使用的是VSTS 2008 + C#+ .Net 2.0.当执行以下语句时,会从String.Format语句中抛出FormatException,任何想法有什么问题?
这是获取我正在使用的template.html的地方.我想在template.html中格式化此部分m = {0}.
string template = String.Empty;
using (StreamReader textFile = new StreamReader("template.html"))
{
template = textFile.ReadToEnd();
String.Format(template, "video.wmv");
}
Run Code Online (Sandbox Code Playgroud)
http://www.mediafire.com/download.php?u4myvhbmmzg
编辑1:
这是我的template.html的内容,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- saved from url=(0014)about:internet -->
<head>
<title>Silverlight Project Test Page </title>
<style type="text/css">
html, body {
height: 100%;
overflow: auto;
}
body {
padding: 0;
margin: 0;
}
#silverlightControlHost {
height: 100%;
}
</style>
<script type="text/javascript">
function onSilverlightError(sender, args) { …Run Code Online (Sandbox Code Playgroud) 您如何认为提供IFormatProvider方法确实是必要的String.Format(string, object)?
编写完整变体是否更好
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
Run Code Online (Sandbox Code Playgroud)
要不就
String.Format("String is {0}", str);
Run Code Online (Sandbox Code Playgroud)
?
Visual Studio 2015中的新字符串插值样式是这样的:
Dim s = $"Hello {name}"
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用它,代码分析告诉我,我打破CA1305:指定IFormatProvider
在过去,我这样做:
Dim s = String.Format(Globalization.CultureInfo.InvariantCulture, "Hello {0}", name)
Run Code Online (Sandbox Code Playgroud)
但是如何用新风格来完成呢?
我必须提一下,我正在寻找.Net 4.5.2的解决方案(.Net 4.6 dcastro有答案)
寻找像.NET的String.Format这样的函数的C++实现.显然有printf和它的品种,但我正在寻找一些位置如下的东西:
String.Format("你好{0}.你已经{1}岁了.感觉{1}怎么样?",姓名,年龄);
这是必要的,因为我们将尝试更轻松地本地化我们的应用程序,并将翻译器{0}和{1}放在句子中的任何位置比给他们%s,%d,%要容易得多d必须按其顺序排列.
我认为搜索和替换变量输入(va_start,va_end等)是我最终要构建的,但如果已经有一个可靠的解决方案,那将是首选.
谢谢 :)