可以多次重新分配struct变量吗?

时间:2018-03-18 21:51:16

标签: c#

所以,我在这里初始化了一些变量。

var center = Vector2.Zero; // For sample purpose, the real one gain the value dynamically.
var size = 1F;
var sizeHalf = size / 2; // The `size` variable will be like readonly after initialization in my project.
var angle = 30F;
var anCos = Mathf.Cos(angle);
var anSin = Mathf.Sin(angle);
  

有关详细信息,Vector2structclass

我有四个Vector2变量,我这样初始化。

var b = new Vector2 (center.x , center.y - sizeHalf);
var t = new Vector2 (center.x , center.y + sizeHalf);
var l = new Vector2 (center.x - sizeHalf , center.y);
var r = new Vector2 (center.x + sizeHalf , center.y);
// Re-assign to get the adjusted values
b = new Vector2 (b.x , (b.x * anCos) + (b.y * anSin));
t = new Vector2 (t.x , (t.x * anCos) + (t.y * anSin));
l = new Vector2 ((l.x * anCos) - (l.y * anSin) , l.y);
r = new Vector2 ((r.x * anCos) - (r.y * anSin) , r.y);

所以,回到我的问题,

  • 多次执行变量初始化重新分配,就像那个好方法一样好吗?
  • 如果不是,我应该做这样的事吗?

    // Temporary variable to store most used calculated variable
    var pB = center.y - sizeHalf;
    var pT = center.y + sizeHalf;
    var pL = center.x - sizeHalf;
    var pR = center.x + sizeHalf;
    var b = new Vector2 (center.x, (center.x * anCos) + (pB * anSin));
    var t = new Vector2 (center.x, (center.x * anCos) + (pT * anSin));
    var l = new Vector2 ((pL * anCos) - (center.y * anSin), center.y);
    var r = new Vector2 ((pR * anCos) - (center.y * anSin), center.y);
    
  • 或者有没有比我上面提到的更好的方法?

感谢。

编辑: 在我的代码中,我使用var而不是真正的TypeName,这是因为我在一个函数中编写了这个代码,只是在该范围内使用,甚至更小的范围(在该函数中,我有一些) if并且只在if内部使用它,并且为了简单和更快的变量编写,它是一个简单的函数,所以我认为使用var就足够了。

2 个答案:

答案 0 :(得分:14)

  

多次进行变量初始化...

首先,让我们正确使用单词。当你初始化某事两次时会发生什么事情是不连贯的,因为根据定义,初始值被分配变量的初始时间已分配。也就是说,第一次时间。

当第二个作业转过来时,该变量已经初始化;第二个任务不会再次初始化它; 它已经有了初始值

但你的意思是说“已分配”,我理解。

  

是不是像这样好的方法做了一次变量赋值,在内存和性能方面还好吗?

对我来说似乎很好。

您是否遇到内存或性能问题?

如果你是的话,这不是我先看的地方之一。 我会使用分析器来检查我的记忆和性能特征

由于表现几乎肯定无关紧要,你应该问的问题是:

  

使用单一赋值形式的第二种技术是否会以其他方式更好?

是。 您应该使用单一作业表格,如果合理可能,每个变量都会被分配一次

原因与内存或性能无关。原因是因为更容易阅读,理解,调试和维护变量不经常更改的代码。在初始化时仅更改一次的变量是理想的。你永远不需要想知道它曾经拥有多少价值,你永远不需要想知道它有多少次变异,并且你可以给你的变量描述名称,其含义不随着控制在你的方法中的进展而改变。

答案 1 :(得分:-1)

绝对没问题。 就堆栈中的变量数量而言,第一个选项更好。