c# - 可以多次重新分配结构变量吗?

标签 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);

For the detail, Vector2 is a struct and NOT a class.

我有四个像这样初始化的 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 足够了。

最佳答案

Is doing a variable initialization more than once ...

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

到第二次赋值时,变量已经初始化;第二个赋值不会再次初始化它; 它已经有了初始值

但是你的意思是说“已分配”,我明白了。

Is doing a variable assignment more than once like that good approach and okay in terms of memory and performance?

我觉得还好。

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

如果您是,这不是我首先要看的地方之一。 我会使用分析器来检查我的内存和性能特征

由于性能几乎肯定是无关紧要的,所以您应该问的问题是:

Is the second technique, using single assignment form, better in some other way?

是的。 您应该使用单一赋值形式,如果可能的话,每个变量都赋值一次

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

关于c# - 可以多次重新分配结构变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353188/

相关文章:

C#/WPF : Place Popup Control in Center of Screen?

c# - 在 GridView 列中拟合长文本

c# - Azure Functions 性能和依赖项注入(inject)

c# - 在字符串中添加句点

c# - LINQ 中的分组 - 简单问题

c# - 使用 WIX 创建安装程序时执行 sqlpackage.exe(它有几个依赖的 dll)

c# - 在线程等待WaitOne()时停止应用程序的正确方法

C# 我的 datagridview 列显示错误的年份

c# - 是否存在内置通配符匹配?

c# - StreamWriter 创建目录而不是文件