只是一个想法。
在C#中使用可选类型参数不是很有用吗?
这会让生活更简单。我厌倦了多个具有相同名称但类型参数不同的类。此外,VS不支持这个版本(文件名): - )
这将消除对非通用IEnumerable的需求:
interface IEnumerable<out T=object>{
IEnumerator<T> GetEnumerator()
}
您怎么看?
答案 0 :(得分:3)
我绝对是为了它。
我正在为不同的场景编写辅助方法,我希望将引用传递给不同的成员和类的方法。为了实现这一点,我正在使用一个Expression<Func<TIn, TOut>>
作为帮助器的参数(这使我能够使用lambda表达式来访问该方法,从而保持所有强类型化)。
但是 - 我目前需要为每个不同数量的输入参数定义一个新的辅助方法,因为我需要有不同数量的泛型参数。而不是
HelperMethod<TIn>(Expression<Action<TIn>> arg) // Yes, C# can distinguish
HelperMethod<TOut>(Expression<Func<TOut>> arg) // these two from eachother
HelperMethod<TIn, TOut>(Expression<Func<TIn, TOut>> arg)
HelperMethod<TIn1, TIn2, TOut>(Expression<Func<TIn1, TIn2, TOut>> arg)
// etc
我最多可以使用两种方法:
HelperMethod<TIn>(Expression<Action<TIn>> arg)
HelperMethod<TOut, TIn1 = DummyType, ...>(Expression<Func<TIn1, ..., TOut> arg)
在我的情况下,它会避免大量的代码重复...
答案 1 :(得分:2)
此语言功能的主要用途是什么?我可以看到,它可以帮助一些管理任务,如文件名和更少的打字等,但除此之外我不认为这将是多么有用。
此外,此功能会使可能放在泛型类型参数上的任何通用约束变得非常复杂,默认类型本身必须作为一种通用约束本身。
我认为这会使语言复杂化而不会给开发者带来任何实际好处。
答案 2 :(得分:0)
我不清楚你究竟在提议什么。目前可能存在具有相同名称但类型参数不同的类型,但这些类型与继承无关 - 您的提案会做什么呢?
此外,如果基类库是从头开始重新设计的,那么几乎肯定不会有非通用的IEnumerable接口 - 它只存在,因为CLR在引入接口时不支持泛型,并且通用接口继承它只是为了遗留代码将继续工作。正在为支持泛型的CLR创建新声明的类,因此该问题不再相关。
答案 3 :(得分:0)
我最近遇到过一个案例,可能会使用类似的东西,但并不完全。我有一个方法,在类A及其关联的类AChild和类B和类BChild之间执行各种类型的转换。通常,A / AChild对与B / BChild相同,但有时A是B的基类,AChild是BChild的基类。
能够说我的类型参数TB默认为TA,并且TBChild默认为TAChild会很好。
请注意,这是一种必须写出类型参数的情况,因为推理不起作用。