出于某种原因,我有一种感觉,只有Jon Skeet会知道答案,但值得一试。
我有这个方法存根,它用作生成命令的代理。
Action<ClassDeclarationOptions> test = (t) => { };
SetCommand(GENERATE_CLASS_COMMAND, test);
我有一个调用此代码的函数,但行为的不同取决于它的调用方式。
如果我通过明确声明一个Action来调用代码,则所有参数都可以解析
public static void GenerateClass(ClassDeclarationOptions classOptions)
{
}
但是,如果我声明一个代表我的行动的函数
SetCommand<ClassDeclarationOptions>(GENERATE_CLASS_COMMAND, Commands.GenerateClass);
然后我需要在将参数传递给函数时明确声明参数:
employees = ["1G8764897", "1J6734897", "1J5292897"]
jobs = len(employees)
print
widgets = ['Processed: ', Counter(), ' of ', str(len(employees)), ' profiles (', Timer(), ')']
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in employees)):
time.sleep(.01)
fetchdata(i)
print "done"
有人可以解释为什么编译器无法从方法定义
解析我的通用参数答案 0 :(得分:3)
我们假设Commands.GenerateClass
上的重载采用了不同的参数类型,例如:
public static void GenerateClass(SomeOtherClass stuff)
{
}
现在,编译器无法确定使用哪种GenerateClass
方法。但是,只要指定类型参数,歧义就会消失。
因此,即使您有一个方法并且编译器推断出类型参数,您也可以稍后添加第二个方法并破坏现有代码,甚至不会意识到它。更加安全,只是为了强制代码明确。