[英]Why C# don't accept constructor requirements with parameters on generics?
[英]C#: Why don't generics use the most generic type it can when we don't specify one?
例如,我现在创建了一个很小的类:
public static class FileSystemInfoComparers<T> where T : FileSystemInfo
{
public static IEqualityComparer<T> FullName
{
get { return new FullNameComparer(); }
}
private class FullNameComparer : IEqualityComparer<T>
{
public bool Equals(T x, T y) { return x.FullName == y.FullName; }
public int GetHashCode(T obj) { return obj.FullName.GetHashCode(); }
}
}
如果可以的话我会想要的
var comparer = FileSystemInfoComparers.FullName;
并具有IEqualityComparer<FileSystemInfo>
的实例,因为我未指定任何类型,并且FileSystemInfo是T可以使用的最通用的类型。 在没有类型约束的情况下,默认类型例如可以是对象或某种东西。
也许不是最好的例子,但是反正只是在这里感到好奇:p
听起来像是困扰我的良方。
特别是,您可以轻松地创建一个具有相同名称的静态属性的名为FileSystemInfoComparers
的非泛型类,突然,您的代码将意味着完全不同的东西。
我宁愿保持简单。 (泛型已经足够复杂了,尤其是类型推断是很麻烦的。)
这是一个有趣的想法,它肯定可以工作,但是考虑到它仅在泛型类型参数受具体类型约束的情况下才有效。
.NET编译器非常擅长类型推断,但往往会避开任何假设。 除了只能在少数高度特定的实例中工作之外,我看不到其他任何原因无法完成。 由于它没有通用的目的,我可以想象微软将不太愿意进行更改以支持它。
您可以通过设置具有您要设置的默认类型的帮助器类来实现此目的。 但是,您目前要求的内容无法在C#3.0中完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.