Jon*_*eet 44
不 - 在C#或CLR中都没有这样的概念.
我发现自己正在尝试实施评论中提到的相同案例:
void doIt<T>(IEnumerable<T> what) { }
void doIt<T>(T whats) { }
Run Code Online (Sandbox Code Playgroud)
我排除了以下代码以引用第一种方法:
doIt(new List<T>());
Run Code Online (Sandbox Code Playgroud)
但它实际上引用了第二个。
一个解决方案是投的说法是这样的:
doIt(new List<T>().AsEnumerable<T>());
Run Code Online (Sandbox Code Playgroud)
演员表可能会被另一个重载隐藏:
void doIt<T>(List<T> whats) {
doIt(whats.AsEnumerable<T>());
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是不可能的。
你可以做的是一些运行时检查:
public bool MyGenericMethod<T>()
{
// if (T is IEnumerable) // don't do this
if (typeof(T).GetInterface("IEnumerable") == null)
return false;
// ...
return true;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12509 次 |
最近记录: |