【发布时间】:2015-06-24 13:33:49
【问题描述】:
我的代码中有这个类
class Stock
{
public DateTime Date;
public string Day;
public double Open, Close, Diff;
public int Volume;
public Stock(double open, double close, double diff, int volume, string day, DateTime date)
{
this.Open = open;
this.Close = close;
this.Diff = diff;
this.Volume = volume;
this.Day = day;
this.Date = date;
}
}
在另一个类中,我想创建一个冒泡排序,它将对传递给它的股票列表 (List<Stocks>) 进行排序,我对此有多个问题,主要问题是数据类型,比较两个值并不容易当它们可能是string、int、double 或DateTime 时。我已经使用TryParse 来检查有效数据类型的方法完成了它,但我正在寻找一个干净的解决方案,这是我迄今为止的尝试
public void BubblesortBy(int sortBy, List<Stock> Stocks)
{
Type objType = typeof(Stock);
FieldInfo[] fields = objType.GetFields();
Stock temp = null;
int loopCount = 0;
bool doBreak = true;
for (int i = 0; i < Stocks.Count; i++)
{
doBreak = true;
for (int j = 0; j < Stocks.Count - 1; j++)
{
if (Compare(fields[sortBy - 1].FieldType.ToString(), fields[sortBy].GetValue(Stocks[j]), fields[sortBy].GetValue(Stocks[j+1])))
{
temp = Stocks[sortBy + 1];
Stocks[sortBy + 1] = Stocks[sortBy];
Stocks[sortBy] = temp;
doBreak = false;
}
loopCount++;
}
if (doBreak) { break; /*early escape*/ }
}
}
传递给它的int 决定是否排序,这就是我使用反射的原因,以便可以通过数字访问变量。
- 日期
- 天
- 打开
- 关闭
- 区别
- 音量
【问题讨论】:
-
我建议使用 switch 语句并根据案例块中的数据类型进行比较。
-
您是将冒泡排序作为一种学习练习,还是出于实际目的?出于 99.9% 的实际目的,不要实现自己的排序算法。
-
@TimS。对于学习,我将如何有效地检查数据类型?
标签: c# list class sorting reflection