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

问题描述 投票:0回答:3

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

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

public void Place (object info){


}

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

c# casting
3个回答
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;
           ...
       }
}

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; 
    }
}

1
投票

或者,使它成为一般的方法

public void Place<T> (T info)
{   
   // your code here
}

你可以称之为关闭类型

Place<int>(23)或只是Place(23)

© www.soinside.com 2019 - 2024. All rights reserved.