2

我有一种情况,我需要通过 CSV(制表符分隔)输出信息数据集。

问题是如果列值包含一个值,那么它需要双引号。

值类型的范围可以从字母数字字符串到日期时间格式的值。

想知道是否有比这更简单的方法:

(string.IsNullOrWhiteSpace(evt.Name)?null:string.Format("\"{0}\"", evt.Name))

对于要导出为字符串值的每个值。

编辑 2013-07-08 11:06 CST(修改 11:17 CST)

public string QuoteFormat(object val)
{
    if(val != null) {
        if(val == typeof(string))
            val = (val as string).Replace("\"" , "\"\"");

        return string.Format("\"{0}\"" , val);
    }
    return null;
}
4

3 回答 3

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();
于 2013-07-08T16:05:45.433 回答
1

我对您发布的功能进行了小幅调整,如果valnull,则返回""。这明确表明您不需要任何字符 if valis 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 "";
    }
}
于 2013-07-08T16:34:01.857 回答
0

如果要返回 null,可以放置一个字符串 null 让您知道结果为 null:

string result = String.Format("\"{0}\"", evt.Name ??"null");//output -> "null"
//string result = String.Format("\"{0}\"", evt.Name ??null);// output -> ""
于 2013-07-08T16:17:40.173 回答