相关疑难解决方法(0)

方法重载决策系统如何决定在传递空值时调用哪个方法?

所以例如你有一个类似的类型:

public class EffectOptions
{
    public EffectOptions ( params object [ ] options ) {}

    public EffectOptions ( IEnumerable<object> options ) {}

    public EffectOptions ( string name ) {}

    public EffectOptions ( object owner ) {}

    public EffectOptions ( int count ) {}

    public EffectOptions ( Point point ) {}

}
Run Code Online (Sandbox Code Playgroud)

这里我只使用构造函数给出示例,但如果它们是类型本身的非构造方法,结果将是相同的,对吧?

所以当你这样做时:

EffectOptions options = new EffectOptions (null);
Run Code Online (Sandbox Code Playgroud)

会调用哪个构造函数,为什么?

我可以自己测试一下,但我想了解重载分辨率系统是如何工作的(不确定它是否被称为).

.net c# overload-resolution

35
推荐指数
2
解决办法
4338
查看次数

在C#6中突破方法重载决策的变化 - 解释?

我们最近从公司的VS2013搬到了VS2017.升级后,我们的代码库将不再构建.我们会收到以下错误:

以下方法或属性之间的调用不明确:'IRepository <T> .Get(object,params Expression <Func <T,object >> [])'和'IRepository <T> .Get(object,params string [] )"

这是呼叫本身:

this.mainRepository.Get(newEntity.Id);
Run Code Online (Sandbox Code Playgroud)

...和接口定义:

public interface IRepository<T> where T : class
{
    T Get(object id, params Expression<Func<T, object>>[] includeExprs);
    T Get(object id, params string[] includeExprs);
}
Run Code Online (Sandbox Code Playgroud)

我想知道这里是否有人可以解释为什么会这样.我怀疑C#6.0 的新改进方法重载解析功能,但查看语言规范我无法找出导致该问题的确切规则.

编辑

我写了一篇关于这个问题的后续博客文章:http://codewithstyle.info/method-overload-resolution-in-c-6-0-an-interesting-bug-story

c# overload-resolution c#-6.0

31
推荐指数
1
解决办法
1409
查看次数

选择哪种C#方法重载?

为什么两个重载都匹配时调用泛型方法?

public static void method1(object obj)
{
    Console.WriteLine("Object");
}

public static void method1<T>(T t)
{
    Console.WriteLine("Type T");
}

public static void Main(String args[])
{
    method1("xyz"); //Will print "Type T";
}
Run Code Online (Sandbox Code Playgroud)

这里不应该有任何冲突,对吧?

.net c# generics

23
推荐指数
2
解决办法
3386
查看次数

标签 统计

c# ×3

.net ×2

overload-resolution ×2

c#-6.0 ×1

generics ×1