Kir*_*Yao 24 c# extension-methods dynamic
我正在读Jon Skeet的书"C#in Depth,2nd Edition".他说我们可以使用动态参数调用扩展方法,使用两种解决方法,就像
dynamic size = 5;
var numbers = Enumerable.Range(10, 10);
var error = numbers.Take(size);
var workaround1 = numbers.Take((int) size);
var workaround2 = Enumerable.Take(numbers, size);
Run Code Online (Sandbox Code Playgroud)
然后他说"如果你想用动态值作为隐含this值调用扩展方法,两种方法都会有效".我不知道如何实现它.
非常感谢.
Jon*_*eet 41
像这样:
dynamic numbers = Enumerable.Range(10, 10);
var firstFive = Enumerable.Take(numbers, 5);
Run Code Online (Sandbox Code Playgroud)
换句话说,只需将其称为静态方法而不是扩展方法.
或者,如果您知道一个合适的类型参数,您可以将其强制转换,我通常会使用一个额外的变量:
dynamic numbers = Enumerable.Range(10, 10);
var sequence = (IEnumerable<int>) numbers;
var firstFive = sequence.Take(5);
Run Code Online (Sandbox Code Playgroud)
...但是如果你正在处理动态类型,你可能不知道序列元素类型,在这种情况下,第一个版本让"执行时编译器"基本上解决它.