我正在用JesseCar 96为CS:go重新编程tf2交易机器人。我正在尝试获取存储在列表数组中的项,但我不知道如何访问它。实例化和项数据的工作方式如下:
public class TradeUserAssets : IEquatable<TradeUserAssets>, IComparable<TradeUserAssets>
{
/// <summary>Inventory type</summary>
public long contextid { get; private set; }
/// <summary>itemid</summary>
public ulong assetid { get; private set; }
public int appid { get; private set; }
public int amount { get; private set; }
public TradeUserAssets(int appid, long contextid, ulong assetid, int amount = 1)
{
this.appid = appid;
this.contextid = contextid;
this.assetid = assetid;
this.amount = amount;
}}它通过以下方式实例化:
private List<TradeUserAssets> otherOfferedItems;
otherOfferedItems = new List<TradeUserAssets>();但是当我使用foreach循环来获取数据时
foreach (long contextid in Trade.OtherOfferedItems.ToString())
{
Console.WriteLine(contextid);
}机器人崩溃了。我尝试过使用for循环,并在.ToString()之后使用索引号。我喜欢这样,但我无法获得任何数据。如果我在OtherOfferedItems之后执行.ToString()以外的任何操作,它就不会构建。任何帮助都是非常感谢的!
编辑: This is my userHandler.cs
string tradeid;
if (myItems.Count == 0)
{
offer.Accept(out tradeid);
Log.Success("Accepted trade offer successfully : Trade ID: " + tradeid);
foreach (asset in Trade.OtherOfferedItems)
{
Console.WriteLine(asset);
}
using (var connection = new MySqlConnection("Server=localhost;Database=skindump;Uid=USERNAME;Pwd=PASSWORD;"))
{
var time = DateTime.Now.TimeOfDay;
var date = DateTime.Now;
date.ToString();
connection.Open();
MySqlCommand cmd = new MySqlCommand("INSERT INTO trades (tradeID, tradeUsed, tradeDate, steamID) VALUES (" + tradeid + ", 1, '" + date + "', '" + OtherSID.ConvertToUInt64() + "');");
cmd.Connection = connection;
cmd.ExecuteNonQuery();
Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
Console.WriteLine(date);
connection.Close();
}
}第201行是mysql连接后面的开方括号(var connection = new mysql connection,等等)。当我注释掉foreach循环时,它运行得很好,没有崩溃,所以这绝对是问题所在。
发布于 2015-05-22 06:30:49
您正在尝试使用ToString()访问contextid,这是错误的方法。
相反,应该遍历TradeUserAssets的集合,并访问循环中的属性。
foreach (var asset in Trade.OtherOfferedItems)
{
Console.WriteLine(asset.contextid);
}编译当前代码的原因是,它为ToString()返回的字符串中的每个字符返回ascii值(这只是集合的类名)。即使它没有在运行时使应用程序崩溃,它也不会是你想要的。
发布于 2015-05-22 06:31:02
您可能想要访问列表中每个对象内的属性。但是您所做的只是将Trade.OtherOfferedItems列表转换为字符串,然后循环遍历该字符串。你可能想做一些类似这样的事情:
foreach (TradeUserAssets asset in Tade.OtherOfferedItems)
{
Console.WriteLine(asset.contextid);
}https://stackoverflow.com/questions/30385282
复制相似问题