这两个中的哪一个更有效率?

时间:2012-01-14 14:17:28

标签: c#

我知道这有点假设,因为我没有循环这个,它只在程序运行中出现一次或两次,所以它只是一个完全无法察觉的时间,但我想知道是否有一个这些比其他更好,或者根本不重要,因为优化器会优化掉更糟糕的代码。

我有这堂课:

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;

我会倾向于第一个,但我不太确定。我很感激您提供的任何见解。

非常感谢!

3 个答案:

答案 0 :(得分:3)

如果array[index]null,则尝试访问成员的第二位代码将抛出NullReferenceException

对于您正在分配新构造的FOO_Data对象的第一个代码,这不会发生。

就性能而言,如果数组确实完全填充,则不太可能看到任何差异,因为对象创建是一个非常轻松的过程。

答案 1 :(得分:3)

首先,如果你使用.Net 3或更新版本,你可以使用自动实现的属性:

public string Description { get; set;}

而不是具有支持字段的属性。

关于哪一个更好,我认为它是语法糖,但我更喜欢第一种方法,因为封装初始化,也是在你的第二种方法存在空异常的可能性。实际上你不应该考虑比特优化。

答案 2 :(得分:2)

我会选择第二种方法,略有改动。

var foo = array[index];
if(foo == null)
{
    foo = new Foo_Data();
    array[index] = foo;
}
foo.Description = data.Description;
foo.Editable = ...
...