gpt4 book ai didi

c# - 在 C# 中创建动态扩展方法?

转载 作者:太空狗 更新时间:2023-10-29 21:33:23 32 4
gpt4 key购买 nike

是否可以解决此错误:

public static class LayoutExtensions
{
/// <summary>
/// Verifies if an object is DynamicNull or just has a null value.
/// </summary>
public static bool IsDynamicNull(this dynamic obj)
{
return (obj == null || obj is DynamicNull);
}

编译时间

Error: The first parameter of an extension method 
cannot be of type 'dynamic'

最佳答案

没有。参见 https://stackoverflow.com/a/5311527/613130

当您使用动态 对象时,您不能通过“扩展方法语法”调用扩展方法。说清楚:

int[] arr = new int[5];
int first1 = arr.First(); // extension method syntax, OK
int first2 = Enumerable.First(arr); // plain syntax, OK

这两个都可以,但是 dynamic

dynamic arr = new int[5];
int first1 = arr.First(); // BOOM!
int first2 = Enumerable.First(arr); // plain syntax, OK

如果您知道 dynamic 对象的工作原理,这是合乎逻辑的。 dynamic 变量/字段/...只是一个 object 变量/字段/...(加上一个属性),C# 编译器知道应该将其视为 动态。 “视为动态”是什么意思?这意味着生成的代码,而不是直接使用变量,使用反射来搜索所需的方法/属性/...在对象的类型中(所以在这种情况下,在 int[]类型)。显然,反射无法绕过所有加载的程序集来寻找可能在任何地方的扩展方法。

关于c# - 在 C# 中创建动态扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743568/

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