我有一个方法,我想作为双重用途,取决于传递的参数实际上是一个整数或字符串值。
我如何检查以下'info'是整数还是字符串值?
public void Place (object info){
}
我知道重载,但由于我不会进入的原因无法改变调用方法。始终传递“对象”类型。有点kludgy但要测试整数和字符串强制转换值。
答案 0 :(得分:4)
不要使用object
作为参数,更好的选择是重载方法。
public void Place (string info){ ... }
public void Place (int info){ ... }
如果由于某种原因无法更改方法签名,那么您需要执行以下操作:
public void Place(object info)
{
if(info is int){
int result = (int)info;
...
}
else if (info is string){
string result = (string)info;
...
}
}
答案 1 :(得分:4)
C#7.0引入了模式匹配。这样可以根据特定的类或结构进行匹配。由于您无法更改方法的签名,因此这是目前最佳选择。
如果测试成功,使用is
表达式分配变量,代码变得更简单:
public void Place( object info )
{
if ( info is string infoString )
{
// use infoString here
}
else if ( info is int infoInt )
{
// use infoInt here
}
}
如果语句仅限于测试输入以匹配特定的单一类型。如果要测试特定情况,开关模式匹配将成为更好的选择:
public void Place( object info )
{
switch ( info )
{
// handle a specific case
case string infoString when infoString.Contains( "someInfo" ):
// do something
break;
case string infoString:
// do something
break;
case int infoInt when infoInt > 10:
// do something
break;
case int infoInt:
// do something
break;
default:
// handle any other case
break;
}
}
答案 2 :(得分:1)
或者,使其成为像
这样的通用方法public void Place<T> (T info)
{
// your code here
}
您可以将其称为关闭类型
Place<int>(23)
或仅Place(23)