我有一个方法,其调用者需要不同的数据类型.我可以通过将它们放入每个调用者中来重复必要的转换十几次,但在被调用的方法中执行它一次效率似乎更高效.
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)
有点过度设计可能;)
唯一可行的方法是返回"对象"引用,然后在调用代码中推断类型.正如之前的海报所说,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)
要从方法返回不同的类型,返回类型必须在其继承层次结构中共享一个公共类,例如object.
C#语言规范第4版的"10.6签名和重载"部分解决了重载问题.相关摘录:
"方法的签名包括方法的名称,类型参数的数量,以及每个形式参数的类型和种类(值,引用或输出),按从左到右的顺序考虑.方法的具体内容不包括返回类型,参数名称或类型参数名称,也不包括可以为最右侧参数指定的params修饰符.当参数类型包含方法的类型参数时, type参数的序号位置用于类型等价,而不是类型参数的名称."
"重载方法允许类,结构或接口声明具有相同名称的多个方法,前提是它们的签名在该类,结构或接口中是唯一的."
公共语言基础结构第4版的"10.2重载"部分也涉及该主题.相关摘录:
"CLS规则38:属性和方法只能根据参数的数量和类型进行重载,但名为op_Implicit和op_Explicit的转换运算符除外,它们也可以根据返回类型重载."
| 归档时间: |
|
| 查看次数: |
3577 次 |
| 最近记录: |