从对象中删除null属性

Dha*_*tel 3 c# properties object

,我有一个类,其中我现在有三个属性我想做什么,如果在对象中,如果任何一个null或空,那么我想从下面的对象中删除它是我的代码.

public class TestClass
{
    public string Name { get; set; }
    public int ID { get; set; }
    public DateTime? DateTime { get; set; }
    public string Address { get; set; }
}
       TestClass t=new TestClass();
        t.Address="address";
        t.ID=132;
        t.Name=string.Empty;
        t.DateTime=null;
Run Code Online (Sandbox Code Playgroud)

现在我想要TestClass的对象,但是Name和DateTime属性不应该是它们在对象中,是否可能?请帮我

NoL*_*ing 8

我很无聊,在 LINQPad 中找到了这个

void Main()
{
    TestClass t=new TestClass();
    t.Address="address";
    t.ID=132;
    t.Name=string.Empty;
    t.DateTime=null;

    t.Dump();
    var ret = t.FixMeUp();
    ((object)ret).Dump();
}

public static class ReClasser
{
    public static dynamic FixMeUp<T>(this T fixMe)
    {
        var t = fixMe.GetType();
        var returnClass = new ExpandoObject() as IDictionary<string, object>;
        foreach(var pr in t.GetProperties())
        {
            var val = pr.GetValue(fixMe);
            if(val is string && string.IsNullOrWhiteSpace(val.ToString()))
            {
            }
            else if(val == null)
            {
            }
            else
            {
                returnClass.Add(pr.Name, val);
            }
        }
        return returnClass;
    }
}

public class TestClass
{
    public string Name { get; set; }
    public int ID { get; set; }
    public DateTime? DateTime { get; set; }
    public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 5

没有从单个对象中删除属性的概念.的类型决定哪些属性本-不是单个对象.

特别是,拥有这样的方法总是有效的:

public void ShowDateTime(TestClass t)
{
    Console.WriteLine(t.DateTme);
}
Run Code Online (Sandbox Code Playgroud)

该代码无法知道您是否想要DateTimet引用的对象中"删除"该属性.如果值为null,它将获得该值 - 这很好.但是你不能删除属性本身.

如果您在某处列出对象的属性,则应该在那里进行过滤.

编辑:好的,不,你给了我们一些背景:

好吧我使用的是Schemaless数据库,因此null和空值也会在数据库中存储空间,这就是原因

因此,在您正在使用的代码中填充该数据库时,不要设置任何与属性值对应的字段.这纯粹是数据库人口问题 - 不是对象本身的问题.

(我也会争辩说你应该考虑这样做可以节省多少空间.你真的关心那么多吗?)

  • @DhavalPatel:您是否真的测量过在数据和检索时间方面有多大差异?我怀疑它很小. (3认同)