检查对象类型的参数是否转换为整数或字符串

时间:2017-12-30 20:58:48

标签: c# casting

我有一个方法,我想作为双重用途,取决于传递的参数实际上是一个整数或字符串值。

我如何检查以下'info'是整数还是字符串值?

public void Place (object info){


}

我知道重载,但由于我不会进入的原因无法改变调用方法。始终传递“对象”类型。有点kludgy但要测试整数和字符串强制转换值。

3 个答案:

答案 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)