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
C# 用于对象排序的多功能属性引用_C#_Sorting - Fatal编程技术网

C# 用于对象排序的多功能属性引用

C# 用于对象排序的多功能属性引用,c#,sorting,C#,Sorting,我面临着一个难题,当我在谷歌和StackOverflow上提问时,我无法描述我的想法,所以如果标题令人困惑,请原谅我 所以,我的想法是有一个名为Sort的类,它以方法的形式包含多个不同的排序算法。。。我设计了一种基于值是否为字符串、int、double等对值进行排序的方法,而无需为每个值重新键入新的排序,但我很难实现排序,因为: 我想要排序的对象列表,命名为Stock,包含许多程序需要能够排序的不同属性,例如日期、日期等等。我的目标不是为每个属性重新编写排序,而是告诉排序列表中每个对象要查看哪个

我面临着一个难题,当我在谷歌和StackOverflow上提问时,我无法描述我的想法,所以如果标题令人困惑,请原谅我

所以,我的想法是有一个名为Sort的类,它以方法的形式包含多个不同的排序算法。。。我设计了一种基于值是否为字符串、int、double等对值进行排序的方法,而无需为每个值重新键入新的排序,但我很难实现排序,因为:

我想要排序的对象列表,命名为Stock,包含许多程序需要能够排序的不同属性,例如日期、日期等等。我的目标不是为每个属性重新编写排序,而是告诉排序列表中每个对象要查看哪个属性。。。这有意义吗

以下是我的假想:

Stock[] stocksList;
Sort sort = new Sort();

stocksList = sort.Sort(sort.SortType.Bubble, stocksList, property);
其中SortType.Bubble是一个枚举器值,用于确定要执行的排序类型,property是要在每个stocksList项中使用的属性名称

在sort.sort方法中,我想说:

for (int i = 0; i < stocksList.Length; i++)
{
    if (stocksList[i].property > stocksList[i + 1].property);
    {
        // Swap stocksList objects.
    }
}
据我所知,这是不可能的,但我希望有人能证明我错了

谢谢, 利亚姆


编辑:我知道可以传递要分析的属性数组和对象列表。。。但这将意味着在两个数组中交换每种排序的值,这将基本上降低算法的效率。

这样做会使算法变得复杂。使用linq方法orderby并传入密钥


如果您确实需要更多的控制,请在需要的地方实现icomparer,这样您就可以控制如何进行比较。orderBy的过载需要一个。我绝对不能使用内置排序,因为这是一个算法和复杂性分配,需要我自己编写排序……然后使用相同的概念来实现灵活的属性处理,而Icomparer是处理灵活比较的机制。然后自己实现排序。你需要修改你的对象来实现IComparable:我说的是IComparaer。不可比。一个是比较单个值的助手,另一个使内置的比较器能够对对象进行排序。在经历了大量头痛和深夜之后,我利用System.Reflection解决了这个问题。。。谢谢你的帮助!让我走上了正确的方向:
SomeCollection.OrderBy((x) => x.someproperty);