需要访问其分配的扩展方法的动态变量 class

Dynamic variable that needs to access an extension method of it's assigned class

如果我有一个扩展方法,例如:

public static void StringExtensionTest(this string stringer) { MessageBox.Show("This is just a test for Whosebug"); }

使用简单的测试代码,例如:

private void button1_Click(object sender, EventArgs e)
{
    string overflow = "Only a test";

    dynamic overflowed = "Only a test";

    overflow.StringExtensionTest();

    overflowed.StringExtensionTest();
}

如何让 overflowed.StringExtensionTest() 工作?在此示例中,我不想使用明显的字符串转换。

后面在实际项目中,我会有多个不同类型的对象,我会把它们赋值给一个动态变量,然后调用我在所有这些中添加的公共扩展方法类。

您正在从动态中获取字符串,但它不会在运行时转换为字符串类型使用以下代码,它将提供帮助和测试。

private void button2_Click(object sender, EventArgs e)
    {
        Test.overflow.StringExtensionTest();
        ((string)Test.overflowed).StringExtensionTest();
    }

public static class Test
{
    public static string overflow = "Only a test";
    public static dynamic overflowed = "Only a test";
    public static void StringExtensionTest(this string stringer) { MessageBox.Show("This is just a test for Whosebug"); }
}

第一次对话

第二次对话

如果在同一个 class 中定义了每种可能类型的扩展方法,那么您可以将其作为静态方法调用:

SomeClass.StringExtensionTest(overflow);

否则,扩展方法在 dynamic 的上下文中没有多大意义。扩展方法将方法添加到可能找到的方法集中,具体取决于调用所在的 C# 文件中使用的命名空间。在 运行 代码中没有等同于命名空间或 C# 文件的东西。