C#-缺少类的对象定义-如何编写?

C#-缺少类的对象定义-如何编写?,c#,object,definition,overloading,C#,Object,Definition,Overloading,这是我源代码的一部分: var result = DiceWebAPI.PlaceAutomatedBets( Session, baseBet, guessLow, guessHigh, betCount > Session.MaxBetBatchSize ? Session.MaxBetBatchSize : betCount, resetOnWin, resetOnLoss,

这是我源代码的一部分:

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
我发现除了会话1之外,方法的所有参数都有定义。有人能告诉我怎么写,在哪里定义吗

也许这会有帮助:

在另一个文件中

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;
}
}
更新:

自动下注。。定义

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

您需要转到PlaceAutomatedBets方法,并且,您会发现PlaceAutomatedBets只接受12个参数,您需要添加缺少的参数

您正在传递额外的参数。例外是不言自明的。而且不需要重新定义
HttpContext.Session属性
它已经存在于
System.Web
中,如果您没有包含它,只需使用System.Web将这一行放在类的顶部

这里的问题是,您正在调用一个具有两个参数签名的方法:

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
对象,并将其与
会话一起传递。这在软件设计中是相当标准的,您希望减少参数的数量。包含所有细节的对象通常称为上下文

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

// 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);
试着像这样使用

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

如果要更改构造函数,您需要DiceWebAPI的源代码。您可以将签名发布到DiceWebAPI上定义PlaceAutomatedBets的位置吗?@RobLang public static PlaceAutomatedBets response PlaceAutomatedBets(SessionInfo会话,AutomatedBets设置);在命名空间Dice.Client.Web{public static class DiceWebAPI{(…)}}的一部分中,您可以将其添加到问题中。您还可以发布自动投注设置的内容吗?看起来你是在手动输入所有设置,而不是先构建一个
AutomatedBetsSettings
对象并将其传入。哦,我不理解这个问题。非常抱歉(用户3327653;)不适用;)祝你今天愉快,嗯?具体在哪里?我不明白,否则就不行了谢谢Rob,但是你不觉得有更简单的解决方案吗?因为我有源代码和编译代码,我不认为有这么大的区别。我更倾向于假设程序员更改了一两行代码,忘记了更新src版本,而不是改变整个编程方式。但是当然-我会再次尝试(但我不认为它会起作用,因为这个应用程序中有很多调用这个参数)thx,如果你有更好的想法-写源代码有一个12个参数的方法?这就是源代码。我已经贴好了。目前没有我的消息来源。它在所有应用程序中都使用这个,如果这是签名,你必须遵守它。是的,您必须构建一个上下文,但这就是C#是类型安全的地方。就像我的示例一样,创建一个
AutomatedBetsSettings
对象,填充项目,然后将其传递进来。如果您在很多地方都这样做,那么您可以创建一个工厂方法。你知道我的意思吗?绝对不起作用(HttpContext名称不存在等等)将行HttpContext更改为System.Web.HttpContext.Current.Sessionnone。名称空间错误。我已经检查过了,在这里它不存在