首页 新闻 会员 周边

如何强制设定自定义类的属性都为null

0
悬赏园豆:5 [已解决问题] 解决于 2017-03-23 15:43

1、自定义类,示例如下:

namespace xx
{
public class UniColumn
{

//构造函数

public UniColumn()

{ }

//自定义属性

public string ColumnId {get;set;}
public int StateId {get;set;}
public bool IsOpen {get;set;}
public DateTime DateCreated {get;set;}
}
}

2、如上面自定义的类,New一个实例。

UniColumn u  = new UniColumn();

其中,只有u.ColumnId 的值为null,其他u.StateId,u.IsOpen,u.DateCreated都有默认值。

3、请问在New一个新的实例后,怎么可以保证所有属性的值都为Null。

 

 

WesternWind的主页 WesternWind | 初学一级 | 园豆:7
提问于:2017-03-22 14:21
< >
分享
最佳答案
0

这里有什么问题么?你db中对应字段允许为空不就可以了么?

收获园豆:2
Daniel Cai | 专家六级 |园豆:10424 | 2017-03-22 15:26

那是肯定的了

WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:28

@WesternWind: 那么你的insert, update又有什么问题么?

Daniel Cai | 园豆:10424 (专家六级) | 2017-03-22 15:32

@Daniel Cai: 

例如我要更新数据库中的部分字段,就有默认的int中的0, bool中FALSE等默认值影响操作。

UniColumn a = new UniColumn(); 
a.ColumnName = "精华图片";

bool b =UniColumnManager.UpdateColumn("1", a);

WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:33

@WesternWind: 你这种思路是不好实现你的需求。

如果我没理解错的话,这个对象除了承载数据外,还会用于数据变更查询的信息携带者。但这种东西不是当某个属性为null就可以认为是排除在db操作外的,这样的判断不充分,而且有些时候会把你带坑里面去。

你要实现的功能最好能用ef这样的orm来做,其判断思路为在你变更实体时记录你变更的操作,这样可以在最后回写db时感知到。

Daniel Cai | 园豆:10424 (专家六级) | 2017-03-22 15:38

@Daniel Cai: 

好的 ,谢谢。

WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:39
其他回答(3)
0

null也是默认值,引用类型和值类型,给你一个眼神自己去领会

收获园豆:3
~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 14:40

这些我明白,就是根据需要,想把所有的属性的默认值都设定为Null,如何搞?

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 14:43

@WesternWind: 装箱啊

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 14:43

@~扎克伯格: 求具体实例,据说有这种操作可以,Eg:  int ? i=null; 

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 14:45

@WesternWind: 那不就得了

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 14:48

@~扎克伯格: 但是我有Get、Set  就不知道该怎么弄了。我一个完整的示例是这样的:

namespace Winder.XXX
{


[DataContract]
public class UniAccount
{
public UniAccount()
{

}

[DataMember]
public string AccountId {get;set;}

[DataMember]
public string TypeId {get;set;}

[DataMember]
public string StateId {get;set;}

[DataMember]
public string AccountName {get;set;}

[DataMember]
public string AccountMobile {get;set;}

[DataMember]
public string AccountEmail {get;set;}

[DataMember]
public string IdCard {get;set;}

[DataMember]
public string AccountPwd {get;set;}

[DataMember]
public bool IsActivate {get;set;}

[DataMember]
public DateTime ValidateTo {get;set;}

[DataMember]
public DateTime LastModify {get;set;}

[DataMember]
public DateTime DateCreated {get;set;}

[DataMember]
public string DeptCreated {get;set;}

[DataMember]
public string CreatedBy {get;set;}

[DataMember]
public string Memo {get;set;}

}
}

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 14:50

@WesternWind: 

public string ColumnId {get;set;} 
public int? StateId {get;set;} 
public bool? IsOpen {get;set;}
public DateTime? DateCreated {get;set;} 

大兄弟,不忍直视你贴的code啊

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 14:54

@~扎克伯格: 多层架构,最后一层是WebAPI,只有这样才能返回正确的JSon格式呀。

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 14:55

@WesternWind: 额,说的不是同一个事,给你改好了,自己去试下吧

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 14:57

@~扎克伯格: 

谢谢兄弟,这样能解决这层的问题,但是DAl层出现了问题,从数据库里读出数据返回到自定义对象会报错。

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:04

@~扎克伯格: 看来,DAL层的Insert和Update不能以UniColumn作为参数了 ,只能HashTable 做参数更靠谱了。这样才能更好的解决空值问题了。

/// <summary>
/// 添加UniColumn对象
/// </summary>
/// <param name="uniColumn">UniColumn</param>
/// <returns>bool</returns>
public bool AddUniColumn(UniColumn uniColumn)

{

}

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:09

@WesternWind: 不知道你要干嘛。。。我想问你报什么错?

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 15:10

@WesternWind: 你可以重新贴下代码吗?评论编辑器的右上角有个Html图标可以选择C#格式的代码插入功能

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2017-03-22 15:18

例如我要更新数据库中的部分字段,就有默认的int中的0, bool中FALSE等默认值,影响操作。

UniColumn a = new UniColumn(); 
a.ColumnName = "精华图片";

bool b =UniColumnManager.UpdateColumn("1", a);

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:22

@~扎克伯格: 

  1 1、业务对象填充实体对象公共方法
  2 
  3  private   SqlParameter[]   FillUniColumnSqlParameterAllColumn2(UniColumn uniColumn)
  4         {
  5            try
  6             {
  7                
  8                 SqlParameter[] paras = new SqlParameter[]
  9                 {
 10                     new SqlParameter("@ColumnId",(uniColumn.ColumnId==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnId),
 11                     new SqlParameter("@StateId",(uniColumn.StateId==null)?Convert.ToString(DBNull.Value):uniColumn.StateId),
 12                     new SqlParameter("@TypeId",(uniColumn.TypeId==null)?Convert.ToString(DBNull.Value):uniColumn.TypeId),
 13                     new SqlParameter("@SystemId",(uniColumn.SystemId==null)?Convert.ToString(DBNull.Value):uniColumn.SystemId),
 14                     new SqlParameter("@ColumnName",(uniColumn.ColumnName==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnName),
 15                     new SqlParameter("@ColumnPinyin",(uniColumn.ColumnPinyin==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnPinyin),
 16                     new SqlParameter("@ColumnEname",(uniColumn.ColumnEname==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnEname),
 17                     new SqlParameter("@ColumnDesc",(uniColumn.ColumnDesc==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnDesc),
 18                     new SqlParameter("@ColumnLogo",(uniColumn.ColumnLogo==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnLogo),
 19                     new SqlParameter("@ColumnImg",(uniColumn.ColumnImg==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnImg),
 20                     new SqlParameter("@ColumnBack",(uniColumn.ColumnBack==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnBack),
 21                     new SqlParameter("@ParentId",(uniColumn.ParentId==null)?Convert.ToString(DBNull.Value):uniColumn.ParentId),
 22                     new SqlParameter("@OrderIndex",(uniColumn.OrderIndex==null)?Convert.ToInt32(DBNull.Value):uniColumn.OrderIndex),
 23                     new SqlParameter("@LastModify",(uniColumn.LastModify==null)?Convert.ToDateTime(DBNull.Value):uniColumn.LastModify),
 24                     new SqlParameter("@DateCreated",(uniColumn.DateCreated==null)?Convert.ToDateTime(DBNull.Value):uniColumn.DateCreated),
 25                     new SqlParameter("@DeptCreated",(uniColumn.DeptCreated==null)?Convert.ToString(DBNull.Value):uniColumn.DeptCreated),
 26                     new SqlParameter("@CreatedBy",(uniColumn.CreatedBy==null)?Convert.ToString(DBNull.Value):uniColumn.CreatedBy),
 27                     new SqlParameter("@Memo",(uniColumn.Memo==null)?Convert.ToString(DBNull.Value):uniColumn.Memo)
 28                 };
 29                     
 30                 return paras;
 31                 
 32             }
 33             catch (Exception e)
 34             {
 35                 Console.WriteLine(e.Message);
 36                 throw e;
 37             }            
 38         } 
 39 
 40 2、实体对象填充业务对象公共方法
 41  /// <summary>
 42         /// 实体对象填充业务对象公共方法
 43         /// </summary>
 44         /// <param name="reader"></param>
 45         /// <returns></returns>
 46         private   UniColumn  FillUniColumnRecord(SqlDataReader reader)
 47         {
 48             UniColumn   uniColumn = new UniColumn ();
 49 
 50             if (reader["ColumnId"] != DBNull.Value)
 51                {                  
 52                  uniColumn.ColumnId  =Convert.ToString(reader["ColumnId"]);
 53                }         
 54             if (reader["StateId"] != DBNull.Value)
 55                {                  
 56                  uniColumn.StateId  =Convert.ToString(reader["StateId"]);
 57                }         
 58             if (reader["TypeId"] != DBNull.Value)
 59                {                  
 60                  uniColumn.TypeId  =Convert.ToString(reader["TypeId"]);
 61                }         
 62             if (reader["SystemId"] != DBNull.Value)
 63                {                  
 64                  uniColumn.SystemId  =Convert.ToString(reader["SystemId"]);
 65                }         
 66             if (reader["ColumnName"] != DBNull.Value)
 67                {                  
 68                  uniColumn.ColumnName  =Convert.ToString(reader["ColumnName"]);
 69                }         
 70             if (reader["ColumnPinyin"] != DBNull.Value)
 71                {                  
 72                  uniColumn.ColumnPinyin  =Convert.ToString(reader["ColumnPinyin"]);
 73                }         
 74             if (reader["ColumnEname"] != DBNull.Value)
 75                {                  
 76                  uniColumn.ColumnEname  =Convert.ToString(reader["ColumnEname"]);
 77                }         
 78             if (reader["ColumnDesc"] != DBNull.Value)
 79                {                  
 80                  uniColumn.ColumnDesc  =Convert.ToString(reader["ColumnDesc"]);
 81                }         
 82             if (reader["ColumnLogo"] != DBNull.Value)
 83                {                  
 84                  uniColumn.ColumnLogo  =Convert.ToString(reader["ColumnLogo"]);
 85                }         
 86             if (reader["ColumnImg"] != DBNull.Value)
 87                {                  
 88                  uniColumn.ColumnImg  =Convert.ToString(reader["ColumnImg"]);
 89                }         
 90             if (reader["ColumnBack"] != DBNull.Value)
 91                {                  
 92                  uniColumn.ColumnBack  =Convert.ToString(reader["ColumnBack"]);
 93                }         
 94             if (reader["ParentId"] != DBNull.Value)
 95                {                  
 96                  uniColumn.ParentId  =Convert.ToString(reader["ParentId"]);
 97                }         
 98             if (reader["OrderIndex"] != DBNull.Value)
 99                {                  
100                  uniColumn.OrderIndex  =Convert.ToInt32(reader["OrderIndex"]);
101                }         
102             if (reader["LastModify"] != DBNull.Value)
103                {                  
104                  uniColumn.LastModify  =Convert.ToDateTime(reader["LastModify"]);
105                }         
106             if (reader["DateCreated"] != DBNull.Value)
107                {                  
108                  uniColumn.DateCreated  =Convert.ToDateTime(reader["DateCreated"]);
109                }         
110             if (reader["DeptCreated"] != DBNull.Value)
111                {                  
112                  uniColumn.DeptCreated  =Convert.ToString(reader["DeptCreated"]);
113                }         
114             if (reader["CreatedBy"] != DBNull.Value)
115                {                  
116                  uniColumn.CreatedBy  =Convert.ToString(reader["CreatedBy"]);
117                }         
118             if (reader["Memo"] != DBNull.Value)
119                {                  
120                  uniColumn.Memo  =Convert.ToString(reader["Memo"]);
121                }         
122             return uniColumn ;
123         }
124         

 

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:27
0

int类型数据只能是数字,bool类型只能是true/fasle。保证所有属性的值都为NULL,你这是要改它们祖宗的姓啊

龙行天涯 | 园豆:1794 (小虾三级) | 2017-03-22 14:50

是的,就是想要New一个对象后。

UniColumn u  = new UniColumn();

他们的默认值u.ColumnId ,u.StateId,u.IsOpen,u.DateCreated都为Null。咋弄?

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 14:52

@WesternWind: 

要都为null,只能这样设置

支持(0) 反对(0) 龙行天涯 | 园豆:1794 (小虾三级) | 2017-03-22 15:43
0

值类型不可空

可空的是可空值类型.你不能给值类型赋空值,只能给可空值类型.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-22 14:56

那这个怎么解释,Eg:  int ? i=null; 

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 14:57

@WesternWind: 他不都说了是可空值类型了么。你那里面所有普通的值类型全部改为可空的在new的时候不就全部都是null的么?

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2017-03-22 15:06

@Daniel Cai: 那该如何解决数据插入、数据更新、数据查询数据库时,以UniColumn作为参数,如何解决空值问题

//插入数据库
public bool AddUniColumn(UniColumn uniColumn)

{

}

//更新数据库

public bool UpdateUniColumn(string columnId,UniColumn uniColumn)

{

}

支持(0) 反对(0) WesternWind | 园豆:7 (初学一级) | 2017-03-22 15:12

@WesternWind: 我猜你的需求是有修改的值才保存到数据库?

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-22 17:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册