2016-06-19 7 views
1

私はtwitch chatボットに取り組んでいます。私のCommand.csクラスでは、私は奇妙な問題に遭遇しました。私はAction<string, User, Channel>を取る1つのコンストラクタとFunc<string, User, Channel, bool>を取るコンストラクタを持っています。最初のコンストラクタは、Actionを呼び出してtrueを返すFuncで2番目のコンストラクタを呼び出すことになっています。これは両方のコンストラクタで7つのパラメータを使用していたときにうまくいきましたが、8番目のパラメータを追加するとコンパイルが中止されました。異なる量のコンストラクタパラメータを持つFuncとActionの間に不一致がありますか?

私が得るエラーはCS8030 "代理人を返す無効な関数は値を返すことができません"です。しかし、私が8番目のパラメータを追加する前に、コードはちょうど良いコンパイルでした

2つのスニペットの唯一の違いは、追加のdescriptionパラメータを追加したことです。後

public class Command 
{ 
    public Command(string name, Action<string, User, Channel> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false) 
     : this(name, (m, u, c) => { action(m, u, c); return true; }, adminOnly, modOnly, ownerOnly, hasUserCooldown, cooldown) 
    { 

    } 

    public Command(string name, Func<string, User, Channel, bool> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false) 
    { 

    } 
} 

public class User { } 
public class Channel { } 

::前

public class Command 
{ 
    public Command(string name, Action<string, User, Channel> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false, string description = null) 
     : this(name, (m, u, c) => { action(m, u, c); return true; }, adminOnly, modOnly, ownerOnly, hasUserCooldown, cooldown, description) 
    { 

    } 

    public Command(string name, Func<string, User, Channel, bool> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false, string description = null) 
    { 

    } 
} 

public class User { } 
public class Channel { } 

はどうもありがとうございました。

+0

はしかし、あなたの前と後のコードの間に違いを参照してくださいしないでください。 – Rahul

+0

@Rahul allowOtherCommandsの後に "string description = null"というコンストラクタの最後にパラメータを追加しました – four

答えて

1

両方のバージョンでは、allowOtherCommandsオプションパラメータを2番目のメソッドに渡すのを忘れました。最初のメソッドでは、それはコンパイラによって検出されない単なる論理的なバグですが、descriptionパラメータは、コンパイラがActionを期待している同じコンストラクタにコールをマップする原因となります。

ただ、すべてのオプションパラメータを渡すと問題が解決されます:

public Command(string name, Action<string, User, Channel> action, 
    bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, 
    TimeSpan? cooldown = null, bool allowOtherCommands = false, string description = null) 
    : this(name, (m, u, c) => { action(m, u, c); return true; }, 
     adminOnly, modOnly, ownerOnly, hasUserCooldown, 
     cooldown, allowOtherCommands, description) 
{ 

} 
+0

ありがとう – four

関連する問題