16

我构建以下匿名对象:

var obj = new {
    Country = countryVal,
    City = cityVal,
    Keyword = key,
    Page = page
};

只有当它的值存在时,我才想在对象中包含成员。

例如如果cityVal为空,我不想在对象初始化中添加城市

var obj = new {
    Country = countryVal,
    City = cityVal,  //ignore this if cityVal is null 
    Keyword = key,
    Page = page
};

这在 C# 中可能吗?

4

4 回答 4

10

它甚至无法使用 codedom 或反射,所以如果你真的需要这个,你最终可以做 if-else

if (string.IsNullOrEmpty(cityVal)) {
    var obj = new {
        Country = countryVal,
        Keyword = key,
        Page = page
    };

    // do something
    return obj;
} else {
    var obj = new {
        Country = countryVal,
        City = cityVal,
        Keyword = key,
        Page = page
    };

    //do something 
    return obj;
}
于 2013-06-27T11:16:55.697 回答
5

你不能那样做。

但是您可以做的是提供这些属性的默认值(null?)。

var obj=  new
            {
                Country= countryVal,
                City = condition ? cityVal : null,
                Keyword = condition ? key : null,
                Page = condition ? page : null
            };
于 2013-06-07T13:36:16.870 回答
1

那么你会有if else条件。但是,如果您使用 newtonsoft JSON 将其序列化为 JSON 对象,这可能会有所帮助:

   var json = JsonConvert.SerializeObject(value, Formatting.None,
                    new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore
                    });
于 2019-04-26T09:12:40.413 回答
0

您可以使用 ExpandoObject 和功能扩展方法。

    pubic class SomeClass

        public dynamic DomainFunction(
            object countryVal = null
          , object cityVal = null
          , object key = null
          , object page = null
        )
        {
            dynamic obj = new ExpandoObject();

            cityVal?.Tee(x => obj.City = x);
            countryVal?.Tee(x => obj.Country = x);
            key?.Tee(x => obj.Keyword = x);
            page?.Tee(x => obj.Page = x);

            return obj;
        }

    }

    public static class FunctionalExtensionMethods{

        public static T Tee<T>(this T source, Action<T> action)
        {
          if (action == null)
            throw new ArgumentNullException(nameof (action));
          action(source);
          return source;
        }

    }
于 2019-06-12T23:59:26.150 回答