首页 > 解决方案 > 在匿名类型数组中包含空值/默认值的更简洁方法?

问题描述

所以这段代码编译:

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

但是对于前两个示例来说,编译器似乎有足够的信息来计算出“默认”的隐式类型 - 那么它没有的原因是什么?有没有任何方法可以在没有辅助功能或变量的情况下实现我想要的?

标签: c#anonymous-types

解决方案


根据您的用例,您可能会侥幸逃脱:

var foo = new[]
{
    new { prop1 = 1, prop2 = "whatever" },
    default,
    new { prop1 = 2, prop2 = "something" },
}.Select(x => new { value = x } ).ToArray();

推荐阅读