动态类型铸造参数在c#

问题描述:

我碰巧看到这样的代码。动态类型铸造参数在c#

function((dynamic) param1, param2); 

何时以及为什么我们需要这种动态类型铸造参数?

+0

我希望看到更多。一般来说,如果该函数需要一个动态变量,您可以*执行,但这不是必需的。 – scottm

+0

@scottm:这就是我最初的想法,然后我记得你也可以在运行时使用它来选择正确的方法重载。 –

+0

@JamesMichaelHare非常小的用例。这是我会谴责以前的开发者故意使用的一种东西。 – scottm

它可以用来动态地选择基础上的param1在运行时类型function(...)过载,例如:

public static void Something(string x) 
{ 
    Console.WriteLine("Hello"); 
} 

public static void Something(int x) 
{ 
    Console.WriteLine("Goodbye"); 
} 
public static void Main() 
{ 
    object x = "A String"; 

    // This will choose string overload of Something() and output "Hello" 
    Something((dynamic)x); 

    x = 13; 

    // This will choose int overload of Something() and output "Goodbye" 
    Something((dynamic)x); 
} 

因此,即使xobject一个参考,它会在运行时决定什么过载Something()来电。请注意,如果没有适当的超载,将抛出异常:

// ... 
    x = 3.14; 

    // No overload of Something(double) exists, so this throws at runtime. 
    Something((dynamic)x);