从List <classname> </classname>中删除空值

时间:2014-10-22 03:22:13

标签: c# list

我有一个正确填充的List,但是在填充之后我想以简单的方式删除所有具有空值的键,如果存在,则类似:

posts.RemoveAll(item =&gt; item == null);

我在此列表中有多个帖子&lt;&gt; 对我来说,问题是找到要在字典中访问的键/值。

有人知道这样做的方法吗?

更新:

我的班级看起来像这样:

public class iPost
{
    public int id { get; set; }
    public int post_origin_post_id { get; set; }
    public int pid { get; set; }
    public int container_type_id { get; set; }
    public int post_member_id { get; set; }
    public int post_toGroup_id { get; set; }
    public string title { get; set; }
    public string comment { get; set; }
    public string latitude { get; set; }
    public string longitude { get; set; }
    public string post_ip { get; set; }
    public bool canShared { get; set; }
    public bool isShared { get; set; }
    public int share_type_id { get; set; }
    public int views { get; set; }

1 个答案:

答案 0 :(得分:0)

你的钥匙在哪里? c#-List没有键。

你的意思是这样吗:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

    namespace DemoApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<DemoClass> list = new List<DemoClass>();

                list.Add(new DemoClass() { Key = "A1" });
                list.Add(new DemoClass() { Key = "A2" });
                list.Add(new DemoClass() { Key = "A3" });

                // Print
                foreach (var it in list) { Console.WriteLine(it.Key); }
                Console.WriteLine();

                // set one key to null
                list[1].Key = null;

                list.RemoveAll(Item => Item.IsToDelete());

                // Print
                foreach (var it in list) { Console.WriteLine(it.Key); }
                Console.WriteLine("As you can see, A2 is missing");

                Console.ReadLine();
            }
        }

        class DemoClass
        {
            public string Key
            {
                get;
                set;
            }

            public object SomeValue
            {
                get;
                set;
            }

            public bool IsToDelete()
            {
                if(Key == null || SomeValue == null)
                {
                     return true;
                }

                return false;
            }
        }
    }

修改 您可以编写一个自己的属性,该属性放在所有未被赋予null的成员上。您可以编写一个读取此信息的类,而不是决定是否要从列表中删除您的实例。 Absract示例:

[ProofForNull]
public string Key
{
   get;
   set;
}

[ProofForNull]
public string Value1
{
   get;
   set;
}

[ProofForNull]
public string Value2
{
   get;
   set;
}

比你更改 IsToDelete()。如果它们具有[ProofForNull]属性,它必须通过反射和证明获得所有成员。如果具有该属性的一个成员为null,则 IsToDelete()将返回true。 使用这种方法,您需要完成一项初始工作,但是您的类的实现要容易得多。