c# – 为什么在一行中声明一个变量,并在下一行中分配它?

c# – 为什么在一行中声明一个变量,并在下一行中分配它?,第1张

概述我经常在C#代码中看到以下约定: some_type val;val = something; 喜欢 DataTable dt;dt = some_function_returning_datatable(); 要么 DataTable dt = new DataTable();dt = some_function_returning_datatable(); 代替 some_type va 我经常在C#代码中看到以下约定:

some_type val;val = something;

喜欢

Datatable dt;dt = some_function_returning_datatable();

要么

Datatable dt = new Datatable();dt = some_function_returning_datatable();

代替

some_type val = something;Datatable dt = some_function_returning_datatable();

我最初认为这是一个习惯,当你必须在范围顶部声明所有局部变量时.但我已经学会了不要那么快地解雇资深开发者的习惯.

(在我的第3段代码中,当我们首先使用new然后从函数分配dt时,它不会浪费内存)

那么,有一个很好的理由在一行中声明,然后分配吗?

解决方法

In my 3rd code section will it not be wastage of memory when we assign dt first with new and then from function

是的,确实如此.只是相对较小 – 创建一个无用的Datatable对象 – 但仍然浪费和不清楚.

So,is there a good reason for declaring in one line,and assigning afterwards?

仅当您没有立即获得该值时.例如:

string x;if (someCondition) {    // Do some work    x = someResult;} else {    // Do some other work    x = someOtherResult;}

通常可以使用条件运算符或将该代码提取到方法中来改进.虽然有时它不会那么成功.

对于简单的情况:

Foo x = SomeInitializationWithNoUsefulSIDeEffects();x = SomeUsefulValue();

要么

Foo x;x = SomeUsefulValue();

你绝对应该重构

Foo x = SomeUsefulValue();

声明点确实有所作为的另一个有趣情况是捕获的变量,尽管通常不是它的预期方式:

int x;for (int i = 0; i < 10; i++) {    x = SomeFunction();    actions.Add(() => Console.Writeline(x));}

VS

for (int i = 0; i < 10; i++) {    int x = SomeFunction();    actions.Add(() => Console.Writeline(x));}

在第一个片段中,每个委托将捕获相同的变量,因此它们都可以有效地看到SomeFunction返回的最后一个值.在第二个片段中,每个代表将捕获x的单独“实例”.

总结

以上是内存溢出为你收集整理的c# – 为什么在一行中声明一个变量,并在下一行中分配它?全部内容,希望文章能够帮你解决c# – 为什么在一行中声明一个变量,并在下一行中分配它?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存