我有一个方法,我想作为双重目的,取决于传递的参数实际上是一个整数或字符串值。
我如何检查以下'info'是整数还是字符串值?
public void Place (object info){
}
我知道重载,但由于我不会进入的原因无法改变调用方法。始终传递“对象”类型。有点kludgy但要测试整数和字符串强制转换值。
不要使用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;
...
}
}
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;
}
}
或者,使它成为一般的方法
public void Place<T> (T info)
{
// your code here
}
你可以称之为关闭类型
Place<int>(23)
或只是Place(23)