如果var为null,如何忽略c#

时间:2015-09-17 13:25:08

标签: c#

我加入一个字符串加载来制作一个超级字符串,但如果一个为空,我需要忽略一个参数。目前我无法想到如何做到这一点,除了在单独的if语句中包含所有参数。帮助:

这里是代码

 public void LinkBuilder(string baselink, string sharedkey, string service, string period, string bulletintype,
        string includeresults, string includemap, string username, string password)
    {
        sharedkey = "&" + sharedkey;
        service = "&" + service;
        period = "&" + period;
        bulletintype = "&" + bulletintype;
        includeresults = "&" + includeresults;
        includemap = "&" + includemap;
        username= "&" + username;
        password = "&" + password;

        string completeLink = sharedkey + service + period + bulletintype + includeresults + includemap + username +
                              password;

不确定如何解决这个问题。

5 个答案:

答案 0 :(得分:22)

我真的会这样重构:

public void LinkBuilder(params string[] links)
{
    string completeLink = String.Join("&", links.Where(x=>!String.IsNullOrEmpty(x)));
}

答案 1 :(得分:1)

你可以通过运算符检查字符串吗?:in method。

public void LinkBuilder(string baselink, string sharedkey, string service, string period, string bulletintype,
        string includeresults, string includemap, string username, string password)
    {
        sharedkey = checkValue(sharedkey);
        service = checkValue(service );
        period = checkValue(period );
        bulletintype = checkValue(bulletintype );
        includeresults = checkValue(includeresults );
        includemap = checkValue(includemap );
        username= checkValue(username );
        password = checkValue(password );

        string completeLink = sharedkey + service + period + bulletintype + includeresults + includemap + username +
                              password;
}
private String checkValue(String str)
{
    return str != null ? "&" + str : "";
}

答案 2 :(得分:1)

创建一个可枚举的字符串集合,使用一些linq过滤掉空值,然后使用String.Join将它们重新连接在一起:

var elements = 
    new[]{baselink, sharedkey, service, period, 
          bulletintype, includeresults, includemap, 
          username, password};
var nonNullElements = elements.Where(e => e != null);
var outputString = String.Join("&", nonNullElements);

如果你真的试图组装一个查询字符串,那就有更好的方法。

例如,您可以使用以下方法利用HttpUtility和反射来将匿名对象解析为查询字符串:

public static class ObjEx
{
    public static string ToQueryString(this object data)
    {
        var collection = data.GetType()
            .GetProperties()
            .Aggregate(
                HttpUtility.ParseQueryString(string.Empty),
                (prev,curr) => {
                    var val = curr.GetValue(data);
                    var propName = curr.Name;
                    prev.Add(propName,val.ToString());
                    return prev;
            });
        return collection.ToString();
    }
}

然后

var data = new{foo = "bar", num = 1, cat = "bad", dog = "good", needsEscaping = "é\"&"};
Console.WriteLine(data.ToQueryString());

会给你:

foo=bar&num=1&cat=bad&dog=good&needsEscaping=%u00e9%22%26

答案 3 :(得分:1)

如果目标是避免将每个参数包装在if语句中,您可以将它们添加到列表中,然后使用com.boardgames.chessString.Join

Linq.Select

答案 4 :(得分:1)

下面会接受Collection,我认为可以更好地维护。我考虑了一下。

public string LinkBuilder(Dictionary<string, string> parameters)
{
     var url = String.Empty;
     foreach(var parameter in parameters)
         if(!string.IsNullOrEmpty(parameter.Value))
               url += String.Format("&{0}={1}", parameter.Key, parameter.Value);

     return url;
}

通过这种方式,您可以传递一个集合来构建您的网址,然后它会return为您提供巨大的网址。你有大量的选择,我个人喜欢马克西姆的回答。