C# 类列表在控制台中一直打印为类名?

C# 类列表在控制台中一直打印为类名?,c#,list,multidimensional-array,C#,List,Multidimensional Array,好吧,也许我只是累了什么的,但我似乎不明白为什么会这样 下面的代码是为我拥有的数据库中的一个数据点每天调用的 当我打印到控制台进行调试时,它只打印为: NamespaceName.SharePrices 不知道发生了什么事 public void OnData(TradeBars data) { decimal price = data["IBM"].Price; DateTime today = data["IBM"].Time;

好吧,也许我只是累了什么的,但我似乎不明白为什么会这样

下面的代码是为我拥有的数据库中的一个数据点每天调用的

当我打印到控制台进行调试时,它只打印为:

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; }
}
public void OnData(交易栏数据)
{
十进制价格=数据[“IBM”]。价格;
DateTime today=数据[“IBM”]。时间;
//--------------下面的工作很好。
如果(今天.Date>=nextTradeDate.Date)
{
市场开放秩序(“IBM”,50);
调试(“购买的股票”);
nextTradeDate=今天。添加天数(1);
MarketOnOpenOrder(“IBM”,-25);
}
var derpList=新股票价格{日期=今天,股票价格=价格};
List newList=新列表();
添加(derpList);
newList.ForEach(Console.WriteLine);
}
}
公共类股票价格
{
公共日期时间日期{get;set;}
公开十进制股价{get;set;}
}
请原谅我的命名习惯。这只是一个个人项目的线框

//----------编辑

谢谢你们的帮助。我想我不明白的是,为什么它在我编写的测试类中工作,我只是在玩假数据,而当真正的实现出现时,它就不工作了:

        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);
        }
    }
publicstaticvoidfindwindowdays()
{
DateTime currentDate=DateTime.Now;
变量日期=新列表();
对于(var dt=当前日期.AddDays(-windowDays);dt i);
foreach(升序中的变量datesyo)
{
控制台写入线(datesyo);
}
}

这似乎可以很好地将日期时间打印到控制台,而无需转换为字符串。但是当我添加第二个元素时,它停止了工作。这就是我困惑的地方。

您应该按照您想要的格式为类重写
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()
返回表示当前对象的字符串。这就是为什么您得到了所描述的内容。

当您在类上调用
控制台.WriteLine
时,它将自动在该类上调用
ToString()
方法


如果你想打印出详细信息,你需要在你的类中重写
ToString()
,或者调用
Console.WriteLine
,你想打印出的每个属性。

C#除了类名之外,对
股价一无所知。如果希望它显示特定的内容,则需要重写
ToString()
方法,如下所示:

public override string ToString()
{
    return "SharePrice: " + theDate.ToString() + ": " + sharePrice.ToString();
}

当然,你可以随心所欲地格式化它,这就是它的美妙之处。如果只关心价格而不关心日期,则只返回
股票价格
无需使用
.ToString()

公共类股票价格
{
公共日期时间日期{get;set;}
公开十进制股价{get;set;}
}
SharePrices sp=new SharePrices(){theDate=DateTime.Now,SharePrices=10};
var newList2=新列表();
新增列表2.Add(sp);
newList2.ForEach(itemX=>Console.WriteLine(“日期:{0}夏普莱斯:{1}”,sp.theDate,sp.sharePrice));

如果您想让它显示更具体的内容,您必须重写
ToString()
。请您澄清一下,您对其中的哪一部分感到困惑?“Object.ToString
方法的默认实现返回对象类型的完全限定名”。。。或者可能没有提到“调用值的ToString方法来生成它的字符串表示法”?这让人困惑,因为在我的TestClass中,我使用DateTime和Decimal编写了虚拟数据,并将其打印到控制台。我通常不在控制台中调试。它在虚拟类中工作的原因是因为内置的
DateTime
类有自己的
ToString()
方法。您的自定义类没有,因此C#默认为
NamespaceName.ClassName
如果未指定任何内容。重复Hrm,我明白您的意思。有人能想出一种不转换为SharePrices类中的字符串的方法吗?稍后我需要在另一个类中使用数据。@J.Rewo,您的数据不会更改。当您调用.ToString()时,只会得到新的字符串obj,而不会更改类的状态。我认为foreach正在等待操作,但您传递了操作,所以这就是为什么会出现编译错误。我错了吗?这编译得很好,不知道你在说什么,也可能你不习惯看到这种类型的循环通过
列表
对象加载一个带有字符串的列表并尝试一下,我说的是这个。看一下这个问题,他正在循环浏览这个列表。
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));