繁体   English   中英

使用Deconstruct元组赋值扩展方法键入推理

[英]Type Inference with Deconstruct tuple assignment extension methods

给出一些扩展方法:

public static TO ConvertValue<TI, TO>(TI value) => (TO)Convert.ChangeType(value, typeof(TO));

public static void Deconstruct<TI, TO1, TO2>(this IEnumerable<TI> src, out TO1 p1, out TO2 p2) {
    var e = src.GetEnumerator();
    p1 = e.MoveNext() ? ConvertValue<TI,TO1>(e.Current) : default(TO1);
    p2 = e.MoveNext() ? ConvertValue<TI,TO2>(e.Current) : default(TO2);
}

为什么C#编译器无法在此处推断Deconstruct的类型:

(double p1, int p2) = new int[] {  1, 2, 3, 4 };

但是在这里推断类型没有问题吗?

Ext.Deconstruct(new int[] {  1, 2, 3 }, out int p3, out double p4);

解构(C#7.0)文档

这些参数都不是类型参数。

分辨率相当于输入rhs.Deconstruct(out var x1,out var x2,...); 用适当数量的参数来解构。 它基于正常的重载分辨率。 这意味着rhs不能是动态的,并且Deconstruct方法的任何参数都不能是类型参数。 将找不到解构(out t x1,out T x2)方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM