我在MSDN上看到一个示例,如果没有返回任何内容,它将允许您指定默认值。见下文:
List<int> months = new List<int> { };
int firstMonth2 = months.DefaultIfEmpty(1).First();
是否可以将此功能与对象一起使用?例如:
class object
{
int id;
string name;
}
代码:
List<myObjec> objs = new List<myObjec> {};
string defaultName = objs.DefaultIfEmpty(/*something to define object in here*/).name;
更新
我以为我可以这样做:
List<myObjec> objs = new List<myObjec> {};
string defaultName = objs.DefaultIfEmpty(new myObjec(-1,"test")).name;
但未能。应该注意的是,我实际上是尝试使用LINQ-To-SQL在我的DBML中定义的对象上使用此方法。不确定这是否会对这种情况产生影响。
答案 0 :(得分:6)
您需要将实例化的类作为DefaultIfEmpty
的参数传递。
class Program
{
static void Main(string[] args)
{
var lTest = new List<Test>();
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<Test>();
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"; }
}
答案 1 :(得分:2)
根据此扩展方法的MSDN页面,您可以执行所需操作:
http://msdn.microsoft.com/en-us/library/bb355419.aspx
检查此页面上的示例,以获取有关如何将其与对象一起使用的示例。
答案 2 :(得分:1)
我必须承认我不太清楚我理解你的问题,但如果返回的对象可能为null,我会尝试建议使用双问号。像这样:
myList.FirstOrDefault() ?? new myObject();
答案 3 :(得分:0)
您可以像这样创建默认对象:
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”