使用'命名参数'选择重载方法

时间:2017-09-12 10:36:36

标签: c#

我想使用' Named Arguments'功能作为参数。

有两种方法。

Class temp {
    public method(Class1 param);
    public method(Class2 param);
};

如果是上述课程,如果我想使用'命名参数调用方法'。我可以像method(param: 'some value');一样打电话,我想给null一些价值',所以当我尝试这样的时候,

method(param:null);

我看到了这条消息

  

以下方法或属性之间的调用不明确:   '方法'和'方法'

然后,我意识到这两个(Class1,Class2)非常相似。

所以当我尝试像这样投射时,

method((Class1)param:null);

我在下面留言时失败了。

  

名称'标识符'在当前上下文中不存在

所以可以'演员'这个' param'参数?

谢谢。

2 个答案:

答案 0 :(得分:1)

你这样做:

import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.CodeLocations;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;

import java.util.Arrays;
import java.util.List;

import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
import static org.jbehave.core.reporters.StoryReporterBuilder.Format.CONSOLE;

public class JBehaveStories extends JUnitStories {

    @Override
    public Configuration configuration() {
        return new MostUsefulConfiguration().useStoryLoader(new LoadFromClasspath(this.getClass()))
                .useStoryReporterBuilder(new StoryReporterBuilder()
                        .withCodeLocation(codeLocationFromClass(this.getClass())).withFormats(CONSOLE));
    }

    @Override
    public InjectableStepsFactory stepsFactory() {
        return new InstanceStepsFactory(configuration(), new EstimatorSteps());
    }

    @Override
    protected List<String> storyPaths() {
        return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()),
                Arrays.asList("**/*.story"), Arrays.asList(""));
    }
}

基本上,您需要将MethodName(param: (Class1)null) 强制转换为给定的类型,而不是参数

答案 1 :(得分:0)

为什么不分开这两种方法?

  • method1(Class1 param)

  • method2(Class2 param)

或类似的东西:

public method<T>(T param)
{
    if(param.GetType() == typeof(Class1))
    {
      //Do stuff for Class1
      Console.WriteLine("Class1");
    }
    else if (param.GetType() == typeof(Class2))
    {
      //Do stuff for Class2
      Console.WriteLine("Class2");
    }
}