三种声明方式哪种最好呢?

wsbylls 2011-08-10 11:23:55
举个例子,比如

1.DataTable dt = new DataTable() ;
dt=...
2.DataTable dt = null;
dt=...
3.DataTable dt ;
dt=...

三者有什么区别?有哪个最好呢?
...全文
248 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaofei830927 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 icedmilk 的回复:]

3.DataTable dt ;
谁说这种方式是废柴了
C# code

string result;
Func(out result);


类似这种代码不是很常见吗?
[/Quote]

这个 Func 方法肯定是你写的
可以在 framework 中找到一个我看看么

framework 要求
引用类型的赋值为默认值 列表赋值为空列表 值类型为默认值
否则 做输出参数要throw异常

你写的func不抛异常 自然是例外
shaofei830927 2011-08-10
  • 打赏
  • 举报
回复
我用的时候只用到
1.DataTable dt = new DataTable()
2.DataTable dt = Get...()
这两种 其他都是废柴
shaofei830927 2011-08-10
  • 打赏
  • 举报
回复
所有代码只用到三种情况
1.DataTable dt = new DataTable()
2.DataTable dt = Get...() -- 这里的Get方法要注意
3.DataTable dt = null; --等同于DataTable dt; 编译之后两者一样

建议第二种 有可能的话会用到第三种

第一种 是构建内存数据表 比如说要Fill(dt) 其他情况都不要用
原因是 早晚是要赋值的 为什么要先赋给他一个没用的对象,在堆中开辟空间 到后来在释放掉呢
。NEt的编译优化不了这种情况的


根据framework代码惯例 方法返回对象
普通实体类型如Person对象:如果不存在 就返回null 而不是返回new Person()
列表类型如List<Person>对象:如果不存在符合条件的结果 返回 空集合 而不是返回 null
dataTable DataSet等 对象 返回null 而不是返回 new DataTable();
py1025677845 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fendoudxiaohouzi 的回复:]

引用 1 楼 abbey 的回复:
1.DataTable dt = new DataTable() ;
直接构造一个空的DataTable对象

2.DataTable dt = null;
声明一个指向空引用的DataTable,稍后才实例化或改变引用

3.DataTable dt ;
类似2,只是没有初始化为null

我的习惯:避免3,看情况使用1或者2


……
[/Quote]

好像就这样啊
cosmo_sei 2011-08-10
  • 打赏
  • 举报
回复
如果这两行连着,就可以用写法1:
DataTable dt = null;
dt = new DataTable();

写法2是为了延迟初始化
DataTable dt = null;
//...中间还有N行代码
dt = new DataTable();

写法3我觉得并不完全没用,比如当声明为readonly:
readonly DataTable dt;
在构造函数中初始化或赋值:
ctor(DataTable dt){ this.dt = dt; }

实际上,如果在方法级别中,使用没有初始化的变量VS编译会报错。
fendoudxiaohouzi 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 abbey 的回复:]
1.DataTable dt = new DataTable() ;
直接构造一个空的DataTable对象

2.DataTable dt = null;
声明一个指向空引用的DataTable,稍后才实例化或改变引用

3.DataTable dt ;
类似2,只是没有初始化为null

我的习惯:避免3,看情况使用1或者2
[/Quote]

+11111
专心做码农 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xinyaping 的回复:]
同1楼,抛弃3,视情况采取1或2。
[/Quote]
+1
熙风 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xinyaping 的回复:]
同1楼,抛弃3,视情况采取1或2。
[/Quote]

up
YapingXin 2011-08-10
  • 打赏
  • 举报
回复
同1楼,抛弃3,视情况采取1或2。
yelang 2011-08-10
  • 打赏
  • 举报
回复
没有最好,只有更好,看实际需要,你哪种都可能用得到,就看到时候用哪种最方便了。
老毕 2011-08-10
  • 打赏
  • 举报
回复
1.DataTable dt = new DataTable() ;
直接构造一个空的DataTable对象

2.DataTable dt = null;
声明一个指向空引用的DataTable,稍后才实例化或改变引用

3.DataTable dt ;
类似2,只是没有初始化为null

我的习惯:避免3,看情况使用1或者2
极地_雪狼 2011-08-10
  • 打赏
  • 举报
回复
第一种情况下会分配内存空间
第二种和第三种情况基本是一样的,只不过习惯不同而已。
  • 打赏
  • 举报
回复
[Quote=引用楼主 wsbylls 的回复:]
2.DataTable dt = null;
dt=...
3.DataTable dt ;
dt=...
[/Quote]假设就是这样的代码,我会觉得2很多余写个“= null”,我都是特意给为1。
  • 打赏
  • 举报
回复
你自己写个测试程序。如果能测试出(当放到一个大软件里时)值得区分哪一种方式比其它好,既从用户体验角度或者从运维这样一个程序需要的硬件资源投资成本角度有明显区别,也算是很大的创举了。
ggw128 2011-08-10
  • 打赏
  • 举报
回复
同意一楼的
salecn 2011-08-10
  • 打赏
  • 举报
回复
来学习了,不错!
theillusion 2011-08-10
  • 打赏
  • 举报
回复
都是一样的,CRL看不到任何不同,但是从代码风格角度来说,推荐在声明时赋值,后面使用,而不是重新赋值
DataTable dt = new DataTable() ;
use(dt);

一个例外是使用out参数
DataTable dt ;
foo(out dt);
YapingXin 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 dashanliu 的回复:]

DATATABLE和DATESET 这两者固然好用,不过我还是建议楼主用LIST对象比较好,这样操作起来比较方便。
[/Quote]

跑题了。如果人家需要的就是DataTable呢?
当然我也同意尽可能用开销小的数据结构。
刘大山 2011-08-10
  • 打赏
  • 举报
回复
DATATABLE和DATESET 这两者固然好用,不过我还是建议楼主用LIST对象比较好,这样操作起来比较方便。
YapingXin 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 geminixxxcc 的回复:]

DataTable dt = null;
这是脱裤子放屁,
DataTable dt;
这么写dt本身就等于null。
[/Quote]

先别这么武断。
显示声明从coding style上来说是值得提倡的。
加载更多回复(10)

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧