gpt4 book ai didi

c# - C# 中泛型类型的命名空间范围别名

转载 作者:太空狗 更新时间:2023-10-29 20:15:13 25 4
gpt4 key购买 nike

让我们举个例子:

public class X { }
public class Y { }
public class Z { }

public delegate IDictionary<Y, IList<Z>> Bar(IList<X> x, int i);

public interface IFoo
{
// ...
Bar Bar { get; }
}

public class Foo : IFoo
{
// ...
public Bar Bar
{
get
{
return null; //...
}
}
}

void Main()
{
IFoo foo; //= ...
IEnumerable<IList<X>> source; //= ...
var results = source.Select(foo.Bar); // <- compile error here
}

编译器说:

The type arguments for method 'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

因为,它不能转换BarFunc<IList<X>, int, IDictionary<Y, IList<Z>>> .

如果我可以在 C# 中为泛型类型创建类型命名空间范围内的类型别名,那就太好了。然后我会定义 Bar不是作为委托(delegate),而是我将其定义为 Func<IList<X>, int, IDictionary<Y, IList<Z>>> 的命名空间范围别名.

public alias Bar = Func<IList<X>, int, IDictionary<Y, IList<Z>>>;

然后我还可以定义 namespace 范围的别名,例如IDictionary<Y, IList<Z>> .

如果使用得当:),它会使代码更具可读性。现在,我必须内联泛型类型,而真正的代码可读性不好:(

你有没有发现同样的问题:)?它不在 C# 3.0 中有什么充分的理由吗?或者没有充分的理由,只是金钱和/或时间的问题?

编辑:我知道我可以使用 using ,但它不是命名空间范围的 - 对我的情况来说不太方便。

EDIT2:参见comment by Joren他建议结构类型也可以解决问题。

最佳答案

你运气不好; using 指令只影响它的当前文件。没有 namespace 范围的类型别名机制。

这是一个相当频繁请求的功能,这是它的分数。但它也是一种“很高兴拥有”的便利功能,而不是真正为语言增加很多表示能力的功能,这是反对它的地方。这样做会很好,但它在优先级列表中的位置并不是很高。

关于c# - C# 中泛型类型的命名空间范围别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2590643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com