我知道string.Format
和ToString()
可以将格式应用于字符串
在我的情况下,我有一个带有值的字符串(通常它将具有数据的字符串表示,但可以具有其他基本数据类型的字符串表示),并且我有另一个表示所需格式的字符串。这些值来自数据库,我需要的是将一个应用于另一个
我甚至不确定这是否可行,所以任何指针都是受欢迎的。我还没有能够应用任何版本的ToString或Format。因为这些要求您在现场声明您想要的格式,并且我的是动态的
是否有一些像tryParse这样的格式化方法(从某种意义上说它会尝试对它给出的数据进行任何可能的格式化?
编辑:请求的一些例子:
stringInput = "Jan 31 2012"; //string representation of a date
inputFormat="dd/MM/yyyy, HH mm"
outputString = "31/Jan/2015, 00:00";
stringInput = "100"; //string representation of a number
inputFormat="D6"
outputString = "000100";
答案 0 :(得分:2)
string.Format(string, string)
需要2个字符串参数,因此您可以从db中获取它们并直接应用它们:
string formatToApply = "{0} and some text and then the {1}";
string firstText = "Text";
string secondText = "finsh.";
// suppose that those strings are from db, not declared locally
var finalString = string.Format(formatToApply, firstText, secondText);
// finalString = "Text and some text and then the finish."
然而,错误的说明符数量或错误的参数数量存在很大的风险。如果您有这样的调用,它将抛出异常:
var finalString = string.Format(formatToApply, firstText);
//An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll;
//Additional information: Index (zero based) must be greater than or
//equal to zero and less than the size of the argument list.
所以请将您的电话打包到try/catch/ (maybe) finally
以根据您的需要处理这种情况。
稍后编辑了所需的示例后发布:
第一个例子:您可能希望利用C#中的DateTime类来知道格式化其输出值。因此,您首先需要将stringInput
转换为DateTime:
var inputDateTime = DateTime.Parse(stringInput);
var outputString = inputDateTime.ToString(inputFormat);
第二个例子:再次,您可能想要利用Double类并再次进行转换:
var inputDouble = Double.Parse(stringInput);
var outputString = inputDouble.ToString(inputFormat);
总结这两个例子,你需要知道输入字符串的类型,你在评论中指定的类型(“日期的字符串表示”)。了解这一点,您可以利用每个特定的类及其格式化输出字符串的能力。否则,很难设计自己某种通用的格式化程序。一个简单的方法可能如下所示:
public string GetFormattedString(string inputString, string inputFormat, string type)
{
switch (type)
{
case "double":
var inputDouble = Double.Parse(inputString);
return inputDouble.ToString(inputFormat);
break;
case "datetime":
var inputDateTime = DateTime.Parse(inputString);
return inputDateTime.ToString(inputFormat);
break;
case "...": // other types which you need to support
default: throw new ArgumentException("Type not supported: " + type);
}
}
这个switch
只是对逻辑如何发生的一个想法,但你需要处理Parse
方法和ToString
方法的错误,如果有许多类型需要支持,更好地利用Factory
等一些设计模式。