c# – 我可以检查一个变量是否可以转换为指定的类型?

我试图验证是否可以将传递的变量转换为特定类型。我已经尝试了以下,但不能得到它来编译,所以我假设我要做的错误的方式(我是C#的新手)

string myType = "System.Int32";
string myValue = "42";

bool canBeCast = false;

try
{
  // try to convert the value to it's intended type to see if it's valid.
  var result = (Type.GetType(typeString))dataValue;
  canBeCast = true;
}
catch
{
  canBeCast = false;
}

我基本上是试图避免大量的switch语句

  switch(myType){
    case "System.Int32":
      try
      {
        var convertedValue = Convert.ToInt32(myValue);
      }
      catch (Exception)
      {
        canBeConverted = false;
      }
      break;
    case "another type":
      ...
  }

编辑:

好的,基本上我有一个已知输入类型的数据库表,如下所示:

CREATE TABLE [dbo].[MetadataTypes] (
    [typeName]  VARCHAR (50)  NOT NULL,
    [dataType]  VARCHAR (50)  NOT NULL,
    [typeRegex] VARCHAR (255) NULL
);

其可以具有诸如数据

"StartTime","System.DateTime",null
"TicketId","System.String","$[Ff][0-9]{7}^"

而对我的功能的输入将是一个KeyValuePair沿着

myInput = new KeyValuePair<string,string>("StartTime","31/12/2010 12:00");

我需要检查KeyValuePair的值是否是MetaDataType预期的正确数据类型。

编辑答复:

Leon真的非常接近我终于想到的解决方案。

作为参考,我的功能现在看起来像这样:

public Boolean ValidateMetadata(KeyValuePair<string, string> dataItem)
{

  // Look for known metadata with name match
  MetadataType type = _repository.GetMetadataTypes().SingleOrDefault(t => t.typeName == dataItem.Key);
  if (type == null) { return false; }

  // Get the data type and try to match to the passed in data item.
  Boolean isCorrectType = false;
  string typeString = type.dataType;
  string dataValue = dataItem.Value;

  try
  {
    var cValue = Convert.ChangeType(dataValue, Type.GetType(typeString));
    isCorrectType = true;
  }
  catch
  {
    isCorrectType = false;
  }

  //TODO: Validate against possible regex here....            

  return isCorrectType;

}
使用“as”运算符尝试演员:

var myObject = something as String

if (myObject != null)
{
  # successfully cast
}
else
{
  #cast failed
}

如果转换失败,抛出异常,但目标对象将为Null。

编辑:

如果你知道你想要什么类型的结果,你可以使用这样的帮助方法:

public static Object TryConvertTo<T>(string input)
{
    Object result = null;
    try
    {
        result = Convert.ChangeType(input, typeof(T));
    }
    catch
    {
    }

    return result;
}
http://stackoverflow.com/questions/7042314/can-i-check-if-a-variable-can-be-cast-to-a-specified-type

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 我可以检查一个变量是否可以转换为指定的类型?