C# - 取决于预期类型的​​方法行为

时间:2009-05-15 11:34:53

标签: c# types

是否可以用C#方式编写,当我写

 String contestId = getParameter("contestId")

我在string中获得了contestId,但是当我写道:

 int contestId = getParameter("contestId")

我将contestId解析为整数?

这只是一个简单的例子,展示了我试图实现的目标。

5 个答案:

答案 0 :(得分:15)

不可以单独根据返回类型重载方法。但是,您可以引入一个通用参数:

T getParameter<T>(string input) {
    // ... do stuff based on T ...
}

如果您使用的是C#3.0,则可以将此方法用作:

var str = getParameter<string>("contestid");
var integer = getParameter<int>("contestid");

因此只说实际类型一次。

答案 1 :(得分:3)

可以做的一件事是返回一个单独的对象,它具有int和string的隐式转换运算符。这将非常接近你要求的行为。

但是,我不会在实践中这样做。隐含的转换通常会带来比它们更值得的麻烦。

相反,添加一个通用参数,如Mehrdad所示:

var str = getParameter<string>("contestid");
var integer = getParameter<int>("contestid");

答案 2 :(得分:1)

我更喜欢这种方法,它读得很好。

Public Class ResultProxy
{
  Private Object _Obj
  Public ResultProxy(Object O)
  { _Obj = O; }

  Public T As<T>()
  { return (T)_Obj; }
}

...

Public ResultProxy getParameter("contestId")
{
// your method's code
   return new ResultProxy(YourPersonalFavorateReturnType);
}

...

String s = getParameter("contestId").As<String>();

答案 3 :(得分:1)

首先,答案是没有人提到的那样。为什么?你必须将方法的结果分配给某些东西吗?例如,你有吗

int getValue()
{
  return 4;
}

getValue();

答案是肯定的,它可以,因此编译器无法通过其返回类型知道您打算调用哪个方法。

此处有个人意见,但我会提出一些与

相似的建议
public string getContestIdAsString(string ConetestId);

public int getContestIdAsInt(string ContestId);

非常清楚每个人在做什么,你解决了你的问题。除非有我遗失的东西。

答案 4 :(得分:0)

public T GetParameter<T>(string parameterName)
{
   //Do work
   return value
}

string contestId = getParameter<string>("contestId")
int contestId = getParameter<int>("contestId")

这是您最好的选择的一个例子。