代码之家  ›  专栏  ›  技术社区  ›  DevMania

函数的动态返回类型

c#
  •  11
  • DevMania  · 技术社区  · 15 年前

    如何根据参数类型创建具有动态返回类型的函数?

    喜欢

    protected DynamicType Test(DynamicType type)
    {
    
    return ; 
    
    }
    
    5 回复  |  直到 8 年前
        1
  •  27
  •   Adam Robinson    15 年前

    你得用仿制药。例如,

    protected T Test<T>(T parameter)
    {
    
    }
    

    在本例中,是 <T> '告诉编译器它表示类型的名称,但您不知道在创建此函数的上下文中是什么。所以你最终会像…

    int foo;
    
    int bar = Test<int>(foo);
    
        2
  •  17
  •   Shiko    8 年前

    虽然接受的答案是好的,但它已经写了两年多了,因此,我应该补充一点,您可以使用:

    protected dynamic methodname(dynamic input)
    {
        return input;
    }
    

    输入将作为同一类型返回,您不需要将该方法作为泛型调用。

    参考文献:
    https://msdn.microsoft.com/en-us/library/dd264736.aspx

        3
  •  5
  •   James Curran    15 年前

    实际上,假设您有一组已知的参数和返回类型,可以使用简单的重载来处理它:

    protected int Test(string p) {   ...  }
    protected string Test(DateTime p ) { .... }
    
        4
  •  1
  •   J.W.    15 年前

    然后你需要使用仿制药。

    protected T Test(T type) {
    
    return type;
    
    }
    
        5
  •  1
  •   pbz    15 年前

    C不是动态语言。为了在C中解决这个问题,您可以返回一个通用对象,并在以后将其类型转换为您认为值应该是什么——这是不推荐的。您还可以返回一个接口,这样您就不会真正关心特定的类实例。正如其他人指出的,您也可以使用泛型。它实际上取决于您在函数体内部需要/想要做什么,因为上面的所有方法都有自己的限制。