Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq OrderBy的字节与布尔值_Linq_Sorting_Boolean_Byte_Ienumerable - Fatal编程技术网

Linq OrderBy的字节与布尔值

Linq OrderBy的字节与布尔值,linq,sorting,boolean,byte,ienumerable,Linq,Sorting,Boolean,Byte,Ienumerable,在排序中使用一个字节超过一个布尔值有什么性能优势吗 例如,给定一些代码: var foo = items.OrderByDescending(item => item.SomeProperty); 获取SomeProperty值的现有代码为: public byte SomeProperty { get { if (a == b) return 1; else return 0; }

在排序中使用一个字节超过一个布尔值有什么性能优势吗

例如,给定一些代码:

var foo = items.OrderByDescending(item => item.SomeProperty);
获取SomeProperty值的现有代码为:

public byte SomeProperty
{
    get
    {
        if (a == b)
            return 1;
        else
            return 0;
    }
}
我想将其重构为:

public bool SomeProperty
{
    get 
    {
        a == b
    }
}

有人告诉我第一个更有效。这是真的吗?在一个字节上使用bool有什么缺点吗

效率很难体现在处理效率上。这将提高开发代码的效率:代码容易理解吗?类似物品是否易于重复使用?如果内部结构在不改变界面的情况下发生变化,是否易于改变?容易测试

在设计房产时,你的第一个问题应该是:我的房产代表什么?这是什么意思?它是否具有用户期望的标识符和类型,或者他们是否必须在文档中查找它,因为他们不知道它的含义

例如,如果您有一个表示某种持久性的类,如文件,并且您发明了一个属性,那么哪一个更容易理解:

class Persistable
{
    public int IsPersisted {get;}
    public bool IsPersisted {get;}
    ...
哪一个读者会立即知道它的意思

所以现在你关于持久化的想法可以有两个值,即尚未持久化和持久化。一个布尔值就足够了。但是,如果您预见到在不久的将来,关于持久性的想法将发生变化,例如,持久化的内容可以不持久化,但在被持久化删除之后,可以进行持久化更改。如果你预见到了这一点,你就必须决定是否最好退回bool。也许您应该返回一个枚举:

public PersistencyState State {get;}
结论:设计属性和方法的标识符和类型,以便用户的学习曲线较低,并且可预见的更改不会产生很大影响。确保属性易于测试和维护。在极少数情况下,可移植性是一个问题

与两个代码更改相比,这些项目对效率的影响更大

回到你的问题上来

如果你想一想某个属性代表什么,你会想:它代表a和b的相等,那么你应该使用:

公共bool EqualAB=>a==b

如果您的问题是是否应该使用get或=>,第一个方法将调用子例程,如,而第二个方法将插入代码。如果=>后面的部分相当大,并且您在数百个位置上使用它,那么您的代码将变得更大

但话说回来:如果你的收入真的很大,你应该把它变成一个财产吗

public string ElderName
{
    get
    {
        myDataBase.Open()
        var allCustomers = myDataBase.FetchAllCustomers().ToList();
        var eldestCustomer = this.FindEldestCustomer(allCustomers);
        return eldestCustomer.Name;
    }
}
如果在1000个位置上使用=>符号,这将对代码大小产生相当大的影响。但老实说,将其放在属性而不是方法中的设计人员不应该得到高效的代码

最后,我在这里问stackoverflow是否有区别:

string Name {get => this.name;}
string Name => this.name;

答案是它被翻译成了相同的汇编代码

非常感谢您的回答!我的问题主要是关于bool vs byte,而不是关于get vs=>。我对问题进行了编辑,以使其更清楚。