我构建以下匿名对象:
var obj = new {
Country = countryVal,
City = cityVal,
Keyword = key,
Page = page
};
我希望只有在其值存在时才将成员包含在对象中。
例如,如果cityVal
为null,我不想在对象初始化中添加City
var obj = new {
Country = countryVal,
City = cityVal, //ignore this if cityVal is null
Keyword = key,
Page = page
};
这在C#中是否可行?
答案 0 :(得分:3)
它甚至不支持编码或反射,所以你最终可以做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;
}
答案 1 :(得分:1)
你做不到。
但你可以做的是提供这些属性的默认值(null?)。
var obj= new
{
Country= countryVal,
City = condition ? cityVal : null,
Keyword = condition ? key : null,
Page = condition ? page : null
};
答案 2 :(得分:0)
如果没有其他条件,您将有。但是,如果您将此序列化为JSON对象 使用newtonsoft JSON可以帮助:
var json = JsonConvert.SerializeObject(value, Formatting.None,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
答案 3 :(得分: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;
}
}