首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问c#数组中的项目(对于cs:go交易机器人)

无法访问c#数组中的项目(对于cs:go交易机器人)
EN

Stack Overflow用户
提问于 2015-05-22 06:17:33
回答 2查看 404关注 0票数 1

我正在用JesseCar 96为CS:go重新编程tf2交易机器人。我正在尝试获取存储在列表数组中的项,但我不知道如何访问它。实例化和项数据的工作方式如下:

代码语言:javascript
复制
    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;
    }}

它通过以下方式实例化:

代码语言:javascript
复制
private List<TradeUserAssets> otherOfferedItems;
otherOfferedItems = new List<TradeUserAssets>();

但是当我使用foreach循环来获取数据时

代码语言:javascript
复制
    foreach (long contextid in Trade.OtherOfferedItems.ToString())
                {
                    Console.WriteLine(contextid);
                }

机器人崩溃了。我尝试过使用for循环,并在.ToString()之后使用索引号。我喜欢这样,但我无法获得任何数据。如果我在OtherOfferedItems之后执行.ToString()以外的任何操作,它就不会构建。任何帮助都是非常感谢的!

编辑: This is my userHandler.cs

代码语言:javascript
复制
    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循环时,它运行得很好,没有崩溃,所以这绝对是问题所在。

EN

回答 2

Stack Overflow用户

发布于 2015-05-22 06:30:49

您正在尝试使用ToString()访问contextid,这是错误的方法。

相反,应该遍历TradeUserAssets的集合,并访问循环中的属性。

代码语言:javascript
复制
foreach (var asset in Trade.OtherOfferedItems)
{
    Console.WriteLine(asset.contextid);
}

编译当前代码的原因是,它为ToString()返回的字符串中的每个字符返回ascii值(这只是集合的类名)。即使它没有在运行时使应用程序崩溃,它也不会是你想要的。

票数 0
EN

Stack Overflow用户

发布于 2015-05-22 06:31:02

您可能想要访问列表中每个对象内的属性。但是您所做的只是将Trade.OtherOfferedItems列表转换为字符串,然后循环遍历该字符串。你可能想做一些类似这样的事情:

代码语言:javascript
复制
foreach (TradeUserAssets asset in Tade.OtherOfferedItems)
{
    Console.WriteLine(asset.contextid);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30385282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档