我在MSDN上看到了一个示例,如果没有返回任何内容,它将允许您指定默认值.见下文:
List<int> months = new List<int> { };
int firstMonth2 = months.DefaultIfEmpty(1).First();
Run Code Online (Sandbox Code Playgroud)
是否可以将此功能与对象一起使用?例:
class object
{
int id;
string name;
}
Run Code Online (Sandbox Code Playgroud)
码:
List<myObjec> objs = new List<myObjec> {};
string defaultName = objs.DefaultIfEmpty(/*something to define object in here*/).name;
Run Code Online (Sandbox Code Playgroud)
更新:
我以为我可以这样做:
List<myObjec> objs = new List<myObjec> {};
string defaultName = objs.DefaultIfEmpty(new myObjec(-1,"test")).name;
Run Code Online (Sandbox Code Playgroud)
但一直没能.应该注意的是,我实际上是尝试使用LINQ-To-SQL在我的DBML中定义的对象上使用此方法.不确定这是否会对这种情况产生影响.
您需要传递一个实例化的类作为参数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; }
}
Run Code Online (Sandbox Code Playgroud)
要添加它并使其更优雅(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"; }
}
Run Code Online (Sandbox Code Playgroud)