这两者中哪一个更有效
本文关键字:有效 哪一个 | 更新日期: 2023-09-27 18:20:22
我知道这有点假设,因为我没有循环,它在程序运行中只发生一两次,所以这只是一段完全不引人注意的时间,但我想知道其中一个是否比另一个更好,或者它是否根本不重要,因为优化器会优化掉更糟糕的代码。
我有这个班:
class FOO_Data
{
private string description, url;
private bool editable;
public FOO_Data(string description, string url, bool editable)
{
this.description = description;
this.url = url;
this.editable = editable;
}
public string Description { get { return description; } set { description = value; } }
public string URL { get { return url; } set { url = value; } }
public bool Editable { get { return editable; } set { editable = value; } }
}
在我的代码中的其他地方,我需要在这个类的数组中编辑这个类的一个实例。
哪一个更好?这个:
array[index] = new FOO_Data(data.Description, data.URL, System.Convert.ToBoolean(data.Editable));
或者这个:
array[index].Description = data.Description;
array[index].Editable = Convert.ToBoolean(data.Editable);
array[index].URL = data.URL;
我倾向于第一种,但我不太确定。如果你能提供任何见解,我将不胜感激。
非常感谢!
如果array[index]
是null
,则尝试访问成员的代码的第二位将抛出NullReferenceException
。
这在代码的第一位中是不可能发生的,在这里您将分配一个新构建的FOO_Data
对象。
就性能而言,如果阵列确实完全填充,则不太可能看到任何差异,因为对象创建是一个非常轻松的过程。
首先,如果你在.Net 3或更新版本上工作,你可以使用自动实现的属性:
public string Description { get; set;}
而不是带有背景字段的属性。
关于哪种更好,我认为这是语法糖,但我更喜欢第一种方法,因为封装了初始化,在第二种方法中也存在null异常的可能性。事实上,您不应该考虑比特优化。
我会选择第二种方法,稍微改变一下。
var foo = array[index];
if(foo == null)
{
foo = new Foo_Data();
array[index] = foo;
}
foo.Description = data.Description;
foo.Editable = ...
...