好吧,也许我只是累了或者其他什么,但我似乎无法弄清楚为什么会一直这样。
对于我拥有的数据库中的数据点,每天都会调用以下代码。
当我打印到控制台进行调试时,它只是打印出来:
NamespaceName.SharePrices
不确定发生了什么。
public void OnData(TradeBars data)
{
decimal price = data["IBM"].Price;
DateTime today = data["IBM"].Time;
//--------------Below works fine.
if (today.Date >= nextTradeDate.Date)
{
MarketOnOpenOrder("IBM", 50);
Debug("Purchased Stock");
nextTradeDate = today.AddDays(1);
MarketOnOpenOrder("IBM", -25);
}
var derpList = new SharePrices { theDate = today, sharePrice = price };
List<SharePrices> newList = new List<SharePrices>();
newList.Add(derpList);
newList.ForEach(Console.WriteLine);
}
}
public class SharePrices
{
public DateTime theDate { get; set; }
public decimal sharePrice { get; set; }
}
请原谅我的命名惯例。这只是个人项目的线框。
// ----------修改
感谢帮助人员。我想我不理解的是为什么它在我的TestClass中工作我写的只是玩假数据,当真正的实现来了它没有用:
public static void FindWindowDays()
{
DateTime currentDate = DateTime.Now;
var dates = new List<DateTime>();
for (var dt = currentDate.AddDays(-windowDays); dt <= currentDate; dt = dt.AddDays(1))
{
dates.Add(dt);
}
var ascending = dates.OrderByDescending(i => i);
foreach (var datesyo in ascending)
{
Console.WriteLine(datesyo);
}
}
这似乎可以很好地将DateTime打印到控制台而无需转换为字符串。但是当我添加第二个元素时,它就停止了工作。这就是我困惑的地方。
答案 0 :(得分:4)
C#对类名以外的SharePrices
一无所知。如果您希望它显示特定的内容,则需要覆盖ToString()
方法,如下所示:
public override string ToString()
{
return "SharePrice: " + theDate.ToString() + ": " + sharePrice.ToString();
}
当然,您可以根据自己的喜好对其进行格式化,这就是它的美妙之处。如果您只关心价格而不关心日期,则仅return
sharePrice
。
答案 1 :(得分:2)
您应该根据需要为您的班级覆盖ToString()
,例如:
public class SharePrices
{
public DateTime theDate { get; set; }
public decimal sharePrice { get; set; }
public override string ToString()
{
return String.Format("The Date: {0}; Share Price: {1};", theDate, sharePrice);
}
}
默认情况下,在不覆盖的情况下,ToString()
返回表示当前对象的字符串。这就是为什么你得到你所描述的。
答案 2 :(得分:1)
当您在某个课程上致电Console.WriteLine
时,它会自动调用该课程上的ToString()
方法。
如果您要打印详细信息,则需要在班级中覆盖ToString()
,或者使用要打印的每个媒体资源Console.WriteLine
。
答案 3 :(得分:0)
这将无需使用.ToString()
public class SharePrices
{
public DateTime theDate { get; set; }
public decimal sharePrice { get; set; }
}
SharePrices sp = new SharePrices() { theDate = DateTime.Now, sharePrice = 10 };
var newList2 = new List<SharePrices>();
newList2.Add(sp);
newList2.ForEach(itemX => Console.WriteLine("Date: {0} Sharprice: {1}",sp.theDate, sp.sharePrice));