【问题标题】:C# - Missing definition of object of class - how to write?C# - 缺少类对象的定义 - 如何编写?
【发布时间】:2014-03-19 16:03:43
【问题描述】:

这是我的源代码的一部分:

var result = DiceWebAPI.PlaceAutomatedBets(
                Session, baseBet, guessLow, guessHigh,
                betCount > Session.MaxBetBatchSize ? Session.MaxBetBatchSize : betCount,
                resetOnWin, resetOnLoss,
                increaseOnWin, increaseOnLoss,
                maxBet, resetOnMaxLoss, stopOnMaxLoss, stopMaxBalance);

viusal c# studio 2010 说:

Error   1   No overload for method 'PlaceAutomatedBets' takes 13 arguments  D:\Downloads\SampleBot_NET_3_5\SampleBot_NET_Source\Dice.Sample.Bot.3_5\Main.cs 359 30  DiceSampleBot35

我发现方法的所有参数都有定义,除了会话之一。谁能告诉我如何写以及在哪里放置定义?

也许会有所帮助:

在另一个文件中

readonly SessionInfo Session;

在另一个

namespace Dice.Client.Web
{
public sealed class SessionInfo : INotifyPropertyChanged
{
    public string AccountCookie { get; }
    public long AccountId { get; }
    public decimal Balance { get; }
    public long BetCount { get; }
    public decimal BetPayIn { get; }
    public decimal BetPayOut { get; }
    public long BetWinCount { get; }
    public long ClientSeed { get; }
    public string DepositAddress { get; }
    public string Email { get; }
    public string EmergencyAddress { get; }
    public int MaxBetBatchSize { get; }
    public string SessionCookie { get; }
    public string Username { get; }

    public event PropertyChangedEventHandler PropertyChanged;
}
}

更新:

PlaceAutomdBets.. 定义

public static PlaceAutomatedBetsResponse PlaceAutomatedBets(SessionInfo session, AutomatedBetsSettings settings);

【问题讨论】:

  • 如果你想改变构造函数,你需要 DiceWebAPI 的源代码。
  • 您可以将签名发布到在 DiceWebAPI 上定义 PlaceAutomdBets 的位置吗?
  • @RobLang public static PlaceAutomatedBetsResponse PlaceAutomatedBets(SessionInfo session, AutomatedBetsSettings 设置);在命名空间 Dice.Client.Web { public static class DiceWebAPI { (...) } } 的一部分
  • 您能否将其添加到问题中。 AutomatedBetsSettings的内容也可以发一下吗?看起来您是手动输入所有设置,而不是先构建一个 AutomatedBetsSettings 对象并将其传入。

标签: c# object definition overloading


【解决方案1】:

您需要使用 PlaceAutomatedBets 方法,并且您会发现您的 PlaceAutomatedBets 只需要 12 个参数,您需要添加缺少的参数。

【讨论】:

  • 哦,我误解了这个问题。很抱歉 user3327653 ;)
  • n/p ;) 祝你有美好的一天
【解决方案2】:

您正在传递额外的参数。例外是不言自明的。并且没有必要重新定义HttpContext.Session Property 它已经存在于System.Web 如果你还没有包含这个,只需将这一行放在你的类的顶部Using System.Web;

【讨论】:

  • 嗯?究竟在哪里?我不明白,否则它不起作用
【解决方案3】:

这里的问题是你调用的方法有两个参数的签名:

public static PlaceAutomatedBetsResponse PlaceAutomatedBets(
             SessionInfo session,     
             AutomatedBetsSettings settings);

但是,你用 12 来调用它:

var result = DiceWebAPI.PlaceAutomatedBets(
            Session, baseBet, guessLow, guessHigh,
            betCount > Session.MaxBetBatchSize ? Session.MaxBetBatchSize : betCount,
            resetOnWin, resetOnLoss,
            increaseOnWin, increaseOnLoss,
            maxBet, resetOnMaxLoss, stopOnMaxLoss, stopMaxBalance);

C# 不能将你的 12 个参数自动组合成一个对象。相反,您必须构建一个AutomatedBetsSettings 对象并使用Session 传递它。这在软件设计中是非常标准的,您希望减少参数的数量。包含所有细节的对象通常称为上下文。

例如,您需要执行以下操作:

// I am guessing the content of AutomatedBetsSettings here, you will need
// to check the actual property values.
var betSettingsContext = new AutomatedBetsSettings() {
            BaseBet = baseBet, 
            GuessLow = guessLow, 
            GuessHigh = guessHigh,
            BestCount = betCount > Session.MaxBetBatchSize ? Session.MaxBetBatchSize : betCount,
            ResetOnWin = resetOnWin, 
            ResetOnLoss = resetOnLoss,
            IncreaseOnWin = increaseOnWin, 
            IncreaseOnLoss = increaseOnLoss,
            MaxBet = maxBet, 
            ResetOnMaxLoss = resetOnMaxLoss, 
            StopOnMaxLoss =  stopOnMaxLoss, 
            StopMaxBalance = stopMaxBalance
};
var result = DiceWebAPI.PlaceAutomatedBets(Session, betSettingsContext);

【讨论】:

  • 谢谢 Rob,但您不认为有更简单的解决方案吗?因为我有源代码并编译,我认为没有那么大的区别。我宁愿假设编码器更改一两行或某事并忘记更新 src 版本 - 而不是改变整个编程方式。但当然 - 我会尝试(但我不认为它会起作用,因为这个应用程序中有很多调用这个参数)再次感谢,如果你有更好的主意 - 写
  • 源码有12个参数的方法吗?
  • 这是来源。我已经粘贴了。暂时没有我的消息来源。它在所有应用程序中都使用它
  • 如果那是签名,你必须遵守它。是的,您必须构建一个上下文,但这就是 C# 类型安全的地方。
  • 像我的例子一样,创建一个AutomatedBetsSettings 对象,填充项目然后传入。如果你在很多地方都这样做,那么你可以创建一个工厂方法。你知道我的意思吗?
【解决方案4】:

尝试这样使用。

var result = DiceWebAPI.PlaceAutomatedBets(
            HttpContext.Current.Session, baseBet, guessLow, guessHigh,
            betCount > Session["MaxBetBatchSize"] ? Session["MaxBetBatchSize"] : betCount,
            resetOnWin, resetOnLoss,
            increaseOnWin, increaseOnLoss,
            maxBet, resetOnMaxLoss, stopOnMaxLoss, stopMaxBalance);

【讨论】:

  • 绝对不行(HttpContext名称不存在等等)
  • 将 HttpContext 行改为 System.Web.HttpContext.Current.Session
  • 无。错误的命名空间。我已经检查过 - 在这个它不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2019-10-15
  • 2017-04-16
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多