如何从方法返回变量数据类型

Pra*_*gus 1 c# asp.net

我有一个方法,其调用者需要不同的数据类型.我可以通过将它们放入每个调用者中来重复必要的转换十几次,但在被调用的方法中执行它一次效率似乎更高效.

public String myMethod(String myArg)
{    
    return DoSomething(myArg);
}

public Int32 myMethod(String myArg)
{
    return Convert.ToInt32(DoSomething(myArg));
}

private String DoSomething(key)
{
    return SomeList[key];
}
Run Code Online (Sandbox Code Playgroud)

如果我有多个方法从SomeList中提取数据并且必须使用不同的数据类型,那么在每个方法中我都要进行类型转换.示例可以是会话变量或查询或表单请求或任何其他数量的事物.

在VB我可以说

Function myMethod(myArg as String) as Variant
    myMethod=DoSomething(myArg)
End Function
Run Code Online (Sandbox Code Playgroud)

对不起,如果原帖不是很清楚.我希望这更有意义.

谢谢

Mat*_*ttC 13

public T MyMethod<T>(string myArg)
{
 //do work here
}
Run Code Online (Sandbox Code Playgroud)

用法

  public T MyMethod<T>(string myArg)
    {
        return (T)Convert.ChangeType(DoSomething(myArg), typeof(T));
    }
Run Code Online (Sandbox Code Playgroud)

有点过度设计可能;)


Mik*_*all 8

唯一可行的方法是返回"对象"引用,然后在调用代码中推断类型.正如之前的海报所说,C#函数不能仅因返回类型而异.

例如:

private object myMethod(String myArg)
{    
    if (a == true)
       return "StringResult";
    else if (b == true)
       return 27;
    else
       return 1.4f;
}

private void Caller()
{
   object result = myMethod("arg");

   if (result is String)
      // Do string stuff
   else if (result is Int32)
      // Do int stuff
   else if (result is Single)
      // Do float stuff     
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*ler 7

您不能有两个具有相同名称和参数列表的方法,只有不同的返回类型.没门.


Dav*_*ith 5

要从方法返回不同的类型,返回类型必须在其继承层次结构中共享一个公共类,例如object.

C#语言规范第4版的"10.6签名和重载"部分解决了重载问题.相关摘录:

"方法的签名包括方法的名称,类型参数的数量,以及每个形式参数的类型和种类(值,引用或输出),按从左到右的顺序考虑.方法的具体内容不包括返回类型,参数名称或类型参数名称,也不包括可以为最右侧参数指定的params修饰符.当参数类型包含方法的类型参数时, type参数的序号位置用于类型等价,而不是类型参数的名称."

"重载方法允许类,结构或接口声明具有相同名称的多个方法,前提是它们的签名在该类,结构或接口中是唯一的."

公共语言基础结构第4版的"10.2重载"部分也涉及该主题.相关摘录:

"CLS规则38:属性和方法只能根据参数的数量和类型进行重载,但名为op_Implicit和op_Explicit的转换运算符除外,它们也可以根据返回类型重载."