【发布时间】:2011-01-05 07:42:35
【问题描述】:
有没有办法做到这一点:
valueType x = 1, y = 1, z = 1;
字符少?
例如当我有大量状态要初始化为相同的起始值时。
谢谢!
【问题讨论】:
标签: c# syntax language-features
有没有办法做到这一点:
valueType x = 1, y = 1, z = 1;
字符少?
例如当我有大量状态要初始化为相同的起始值时。
谢谢!
【问题讨论】:
标签: c# syntax language-features
你可以试试
int x, y, z;
x = y = z = 1;
但我看不出它对你有什么帮助......如果你真的有很多变量你必须初始化为相同的东西,你可以考虑使用某种集合:
var myInts = new List<int>();
for (int i = 0; i < 1000; i++)
myInts.Add(1);
【讨论】:
如果起始值为零并且它们是您的类的成员(不是局部变量),那么您不需要将它们显式初始化为零。
否则,不。
使用数组代替大量参数有意义吗?
【讨论】:
总的来说,我认为将每个声明分开会更好。它往往使以后更容易改变。
尤其是当大量变量倾向于表明它们应该组合成另一个对象时。
所以我倾向于这样做......
valueType x = IntialValue;
valueType y = IntialValue;
valueType z = IntialValue;
等等……
【讨论】:
假设你所有的“变量”实际上是 POCO 的 fields(普通的旧 CLR 对象,即,除了保存数据之外没有其他用途的对象) .
class State {
public double pression_top;
public double pression_bottom;
/* hundreds and hundres of fields */
}
在这种情况下,您可以执行以下操作:
var myState = new State();
var t = typeof(State);
foreach (var field in t.GetFields()) {
field.SetValue(myState, 1);
}
但请注意,此代码未优化,并且对并发不太友好。
【讨论】:
我想添加一个有趣的事实并提醒自己,许多基本原则仍在现代语言中使用。此示例来自“The C Progamming Language”一书(1988 年),在 C# 语言中也有效:
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
一个很好的例子,展示了如果变量很少,你可以将一个值作为单个表达式分配给变量,如果很多则更好地创建一个集合。
另外,初始化nwhite = nother = 0;可以写成公式:
xval = (yval = (zval = 0));;
因为赋值运算符是右结合的(从右到左执行),我们可以不用括号优雅地编写表达式。
【讨论】: