c#之在匿名类型数组中包含空值/默认值的更简洁方法

duanxz 阅读:46 2025-06-02 22:19:02 评论:0

所以这段代码可以编译:

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(); 


标签:C#
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号