我有一种情况需要通过CSV(Tab-delimited)输出信息数据集。
问题是如果列值包含值,则需要双引号。
值类型的范围可以从Alpha-Numeric字符串到DateTime格式化值。
想知道是否有比这更简单的方法:
(string.IsNullOrWhiteSpace(evt.Name)?null:string.Format("\"{0}\"", evt.Name))
表示要导出到字符串值的每个值。
public string QuoteFormat(object val)
{
if(val != null) {
if(val == typeof(string))
val = (val as string).Replace("\"" , "\"\"");
return string.Format("\"{0}\"" , val);
}
return null;
}
答案 0 :(得分:2)
您问是否有办法更清楚地表达您的问题。虽然你自己的代码是好的,我们没有看到它的问题,我建议你使用扩展。
public static class GoldBishopExtensions
{
public static string Transform(this string source, Func<string, string> transform, string fallback = null)
{
return !String.IsNullOrWhiteSpace(source)
? transform(source)
: fallback;
}
}
然后将其用于:
// Return "evt.Name" if String is not null or whitespaces
// return null otherwise
evt.Name.Transform(name => String.Format("\"{0}\"", name));
或者:
// Return ("evt.Name") if String is not null or whitespaces
// return (No Value) otherwise
evt.Name.Transform(name => String.Format("\"{0}\"", name), "No Value");
但正如评论中所述,你不会真的需要这个,因为你的代码很好。
修改:针对您自己的具体问题,您的扩展名可以是:
public static class GoldBishopExtensions
{
public static string Quote(this string source, string fallback = null)
{
return !String.IsNullOrWhiteSpace(source)
? String.Format("\"{0}\"", source)
: fallback;
}
}
evt.Name.Quote();
答案 1 :(得分:1)
我对您发布的功能进行了小幅调整,如果val
为null
,则返回""
。如果val
为null
,则明确规定您不需要字符。
public string QuoteFormat(object val)
{
if(val != null) {
// This is fine if there is an additional requirement to double existing quotes
if(val == typeof(string))
val = (val as string).Replace("\"" , "\"\"");
// if you are using dates and the default format is fine, then this will work.
// otherwise I would suggest formatting the date before passing in and perhaps
// changing the parameter to string
return string.Format("\"{0}\"" , val);
} else {
return "";
}
}
答案 2 :(得分:0)
如果要返回null,可以将字符串设置为null,以便让您知道结果为null:
string result = String.Format("\"{0}\"", evt.Name ??"null");//output -> "null"
//string result = String.Format("\"{0}\"", evt.Name ??null);// output -> ""