尝试将int设置为已存在的int时出现NullReferenceException

时间:2014-05-27 12:07:50

标签: c# bots steam

我试图将一个整数设置为一个已存在的整数,它给了我一个NullReferenceException。因此,从.json文件中获取并设置整数,然后我尝试将其设置为一个名为price的整数。

Configuration.BotInfo botConfig;
int price = botConfig.TicketPriceBuy;

这是BotInfo类

public class BotInfo
    {
        public string Username { get; set; }
        public string Password { get; set; }
        public string DisplayName { get; set; }
        public string ChatResponse { get; set; }
        public string LogFile { get; set; }
        public string BotControlClass { get; set; }
        public int MaximumTradeTime { get; set; }
        public int MaximumActionGap { get; set; }
        public string DisplayNamePrefix { get; set; }
        public int TradePollingInterval { get; set; }
        public string LogLevel { get; set; }
        public int TicketPriceBuy { get; set; }
        public int BackpackExpanderPriceBuy { get; set; }
        public int DecalToolPriceBuy { get; set; }
        public int KeyPriceBuy { get; set; }
        public int NameTagPriceBuy { get; set; }
        public int AustralianGoldPriceBuy { get; set; }
        public int TicketPriceSell { get; set; }
        public int BackpackExpanderPriceSell { get; set; }
        public int DecalToolPriceSell { get; set; }
        public int KeyPriceSell { get; set; }
        public int NameTagPriceSell { get; set; }
        public int AustralianGoldPriceSell { get; set; }
        public ulong[] Admins { get; set; }

但后来我得到了:

  

哦,出现错误:发生了未知错误:   System.NullReferenceException:对象引用未设置为   对象的实例。在   SteamBot.SimpleUserHandler.OnTradeAddItem(Item schemaItem,Item   inventoryItem)在C:\ SteamBot - JiaWei \ SteamBot \ UserHandler.cs:行   182在SteamTrade.Trade.FireOnUserAddItem(TradeEvent tradeEvent)中   C:\ SteamBot - JiaWei \ SteamTrade \ Trade.cs:640行   C:\ SteamBot中的SteamTrade.Trade.Poll() -   JiaWei \ SteamTrade \ Trade.cs:572号线   SteamTrade.TradeManager。<> c__DisplayClass6.b__5()in   C:\ SteamBot - JiaWei \ SteamTrade \ TradeManager.cs:第272行。

第182行是:

int price = botConfig.TicketPriceBuy;

(其他几行并不重要,因为只是从第一行开始跟进。)

那么,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

这与整数无关。看看你的两行:

Configuration.BotInfo botConfig;
int price = botConfig.TicketPriceBuy;

您声明了一个BotInfo对象,但从未将其初始化为任何内容。因此botConfignull。然后,您立即尝试取消引用该对象以从中提取值。但是您无法取消引用null

您需要初始化引用类型。例如:

Configuration.BotInfo botConfig = new Configuration.BotInfo();

要确认这一点,请在调试代码中放置一个断点。逐行调试调试器并检查您正在使用的对象的运行时值。这将帮助您更快地确定代码中的问题。

答案 1 :(得分:0)

我认为你还没有在这里创建类的实例。要在对象botConfig中获取值,您需要先对其进行初始化。如果没有初始化,您将无法访问对象中的公共methodsproperties。您将获得null引用。

Configuration.BotInfo botConfig = new Configuration.BotInfo();

//some method which populate botConfig or below line
botConfig.TicketPriceBuy = 123;

//you will get the value
int price = botConfig.TicketPriceBuy;

答案 2 :(得分:0)

我不确定你是否需要null,但你可以通过制作一个可以为空的integer来解决这个问题:

int? price = botConfig == null ? null : botConfig.TicketPriceBuy;