这两种情况中哪一种最正确?这种情况下只声明了rxBytes变量?
private void ParseRxData(RxMessage rxMessage) {
List<byte> rxBytes;
rxBytes = rxMessage.LengthBytes;
rxBytes.AddRange(rxMessage.Payload);
/* Do stuff with 'rxBytes' variable */
}
或者rxBytes变量实例化的情况?
private void ParseRxData(RxMessage rxMessage) {
var rxBytes = new List<byte>;
rxBytes = rxMessage.LengthBytes;
rxBytes.AddRange(rxMessage.Payload);
/* Do stuff with 'rxBytes' variable */
}
简而言之,在声明变量后立即赋值变量是否有必要实例化?
我是一个相当新的C#/ OOP程序员,所以如果我没有正确使用术语,我会道歉。
答案 0 :(得分:1)
以下是完全合法的语法:
List<byte> rxBytes = rxMessage.LengthBytes;
这不是实例化所必需的,只是一项任务。
使用new
关键字创建新对象时,您将为该对象分配内存。但是,在您的情况下,您为对象分配内存并将对象的引用传递给变量,然后立即将该变量指定为指向另一个对象。第一个对象立即成为孤儿,并最终收集垃圾。
所以,你要问的是,如果你能做到的话不仅是允许的,那么对于负责任的编程来说,这是更好的做法。
答案 1 :(得分:1)
简而言之,是否有必要在变量被声明后立即分配值时实例化变量?
否 - 实际上,如果您将rxBytes
初始化为新的List<byte>
,然后使用rxMessage.LengthBytes
覆盖该变量,那么您创建的列表将永远不会被使用并将被垃圾回收。您似乎只为其分配List<byte>
,以便您可以使用var
这是不必要的。你的第一个代码块是正确的方法。
您也可以这样做
var rxBytes = rxMessage.LengthBytes;
但从功能上来说,在一行上声明变量并在另一行上为其赋值是没有区别的。
有没有办法设置等号&#34;按值&#34;?
好的参考类型&#34;值&#34; 是引用,但如果您只是希望新变量引用列表的副本,则可以执行
var rxBytes = new List<byte>(rxMessage.LengthBytes);