c# - 在匿名类型数组中包含空值/默认值的更简洁方法?
问题描述
所以这段代码编译:
var foo = new[]
{
new { prop1 = 1, prop2 = "whatever" },
default,
new { prop1 = 2, prop2 = "something" },
};
但以下没有:
var foo = new[]
{
new { value = new { prop1 = 1, prop2 = "whatever" } },
new { value = default },
new { value = new { prop1 = 2, prop2 = "something" } },
};
到目前为止,我能找到的唯一方法是通过:
T MakeDefaultOf<T>(T dummy) => default(T);
var foo = new[]
{
new { value = new { prop1 = 1, prop2 = "whatever" } },
new { value = MakeDefaultOf(new { prop1 = 0, prop2 = "" }) },
new { value = new { prop1 = 2, prop2 = "something" } }
};
但是对于前两个示例来说,编译器似乎有足够的信息来计算出“默认”的隐式类型 - 那么它没有的原因是什么?有没有任何方法可以在没有辅助功能或变量的情况下实现我想要的?
解决方案
根据您的用例,您可能会侥幸逃脱:
var foo = new[]
{
new { prop1 = 1, prop2 = "whatever" },
default,
new { prop1 = 2, prop2 = "something" },
}.Select(x => new { value = x } ).ToArray();
推荐阅读
- pyspark - 在 pyspark 中预处理奇怪的数据
- python - 如何删除python列表笼
- linux - suid 在 docker 容器内不被尊重
- javascript - 为什么在javascript中尝试警报时我没有得到输入字段的值?
- vue.js - Vue:刷新页面后找不到404页面
- histogram - Spyder中如何在直方图中直接插入一系列日期对应其每年的收益(股票收益),见附图
- azure-devops - Azure DevOps 中的项目是否有与 JIRA 一样的路线图创建功能?
- python - 在循环之前访问“for”循环中的迭代器
- c# - SignalR 使用的任务的奇怪 gcroot 输出
- r - OpenOLAT 中 R/exams 中输入字符串的大小写不敏感更正