代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

对对象使用DefaultIfEmpty?

  •  4
  • Abe Miessler  · 技术社区  · 14 年前

    我在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中定义的对象使用此方法。不确定这是否对本案有影响。

    4 回复  |  直到 14 年前
        1
  •  6
  •   Dustin Laine    14 年前

    您需要将实例化的类作为 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"; }
    }
    
        2
  •  2
  •   Waleed Al-Balooshi    14 年前

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

    查看此页上的示例,以获取如何将其用于对象的示例。

        3
  •  1
  •   Peter Perháč    14 年前

    我必须承认我不太确定我是否理解您的问题,但如果返回的对象可能为空,我将尝试建议使用双问号。就像这样:

    myList.FirstOrDefault() ?? new myObject();
    
        4
  •  0
  •   Sebastien Robert    14 年前

    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;
    

    推荐文章