格式字符串,如果不为null

时间:2013-07-08 15:50:02

标签: c# string-formatting

我有一种情况需要通过CSV(Tab-delimited)输出信息数据集。

问题是如果列值包含值,则需要双引号。

值类型的范围可以从Alpha-Numeric字符串到DateTime格式化值。

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

(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;
}

3 个答案:

答案 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)

我对您发布的功能进行了小幅调整,如果valnull,则返回""。如果valnull,则明确规定您不需要字符。

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 -> ""