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属性不应该是它们在对象中,是否可能?请帮我
我很无聊,在 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)
没有从单个对象中删除属性的概念.的类型决定哪些属性本-不是单个对象.
特别是,拥有这样的方法总是有效的:
public void ShowDateTime(TestClass t)
{
Console.WriteLine(t.DateTme);
}
Run Code Online (Sandbox Code Playgroud)
该代码无法知道您是否想要DateTime从t引用的对象中"删除"该属性.如果值为null,它将获得该值 - 这很好.但是你不能删除属性本身.
如果您在某处列出对象的属性,则应该在那里进行过滤.
编辑:好的,不,你给了我们一些背景:
好吧我使用的是Schemaless数据库,因此null和空值也会在数据库中存储空间,这就是原因
因此,在您正在使用的代码中填充该数据库时,不要设置任何与属性值对应的字段.这纯粹是数据库人口问题 - 不是对象本身的问题.
(我也会争辩说你应该考虑这样做可以节省多少空间.你真的关心那么多吗?)
| 归档时间: |
|
| 查看次数: |
16052 次 |
| 最近记录: |