将DefaultIfEmpty与对象一起使用?

我在MSDN上看到了一个示例,如果没有返回任何内容,它将允许您指定默认值。 见下文:

List months = new List { }; int firstMonth2 = months.DefaultIfEmpty(1).First(); 

是否可以将此function与对象一起使用? 例:

 class object { int id; string name; } 

码:

 List objs = new List {}; string defaultName = objs.DefaultIfEmpty(/*something to define object in here*/).name; 

更新:

我以为我可以这样做:

 List objs = new List {}; string defaultName = objs.DefaultIfEmpty(new myObjec(-1,"test")).name; 

但一直没能。 应该注意的是,我实际上是尝试使用LINQ-To-SQL在我的DBML中定义的对象上使用此方法。 不确定这是否会对这种情况产生影响。

您需要将实例化的类作为DefaultIfEmpty的参数传递。

 class Program { static void Main(string[] args) { var lTest = new List(); var s = lTest.DefaultIfEmpty(new Test() { i = 1, name = "testing" }).First().name; Console.WriteLine(s); Console.ReadLine(); } } public class Test { public int i { get; set; } public string name { get; set; } } 

要添加它并使它更优雅(IMO)添加一个默认构造函数:

 class Program { static void Main(string[] args) { var lTest = new List(); var s = lTest.DefaultIfEmpty(new Test()).First().name; Console.WriteLine(s); Console.ReadLine(); } } public class Test { public int i { get; set; } public string name { get; set; } public Test() { i = 2; name = "testing2"; } } 

根据此扩展方法的MSDN页面,您可以执行您想要的操作:

http://msdn.microsoft.com/en-us/library/bb355419.aspx

请查看此页面上的示例,以获取有关如何将其与对象一起使用的示例。

我必须承认我不太清楚我理解你的问题,但如果返回的对象可能为null,我会尝试建议使用双问号。 像这样:

 myList.FirstOrDefault() ?? new myObject(); 

您可以像这样创建一个默认对象:

 Object o_Obj_Default = new Object(); o_Obj_Default.id = 3; o_Obj_Default.name = "C"; 

并将其添加到您的默认值:

 string defaultName = objs.DefaultIfEmpty(o_Obj_Default).First().name; 

如果您的列表“objs”为空,则结果为“C”