我有以下代码:
static void Main(string[] args)
{
string prueba = "Something_2.zip";
int num;
prueba = prueba.Split('.')[0];
if (!prueba.Contains("_"))
{
prueba = prueba + "_";
}
else
{
//The code I want to try
}
}
我的想法是,在其他地方我想在_
之后拆分字符串并将其转换为int,我这样做
num = Convert.ToInt16(prueba.Split('_')[1]);
但我可以分开吗?例如num = (int)(prueba.Split('_')[1]);
有可能这样做吗?或者我必须使用Convert
?
答案 0 :(得分:3)
您无法将字符串转换为整数,因此您需要进行一些转换: 我建议你在这个场景中使用
Int.TryParse()
。 因此,else部分将如下所示:
else
{
if(int.TryParse(prueba.Substring(prueba.LastIndexOf('_')),out num))
{
//proceed your code
}
else
{
//Throw error message
}
}
答案 1 :(得分:2)
将string
转换为int
,如下所示:
var myInt = 0;
if (Int32.TryParse(prueba.Split('_')[1], out myInt))
{
// use myInt here
}
答案 2 :(得分:2)
它是一个字符串,所以你必须解析它。您可以使用Convert.ToInt32,int.Parse或int.TryParse来执行此操作,如下所示:
var numString = prueba.Split('_')[1];
var numByConvert = Convert.ToInt32(numString);
var numByParse = int.Parse(numString);
int numByTryParse;
if(int.TryParse(numString, out numByTryParse))
{/*Success, numByTryParse is populated with the numString's int value.*/}
else
{/*Failure. You can handle the fact that it failed to parse now. numByTryParse will be 0 */}
答案 3 :(得分:0)
string prueba = "Something_2.zip";
prueba = prueba.Split('.')[0];
int theValue = 0; // Also default value if no '_' is found
var index = prueba.LastIndexOf('_');
if(index >= 0)
int.TryParse(prueba.Substring(index + 1), out theValue);
theValue.Dump();
答案 4 :(得分:0)
您可以使用正则表达式并避免所有字符串拆分逻辑。如果您需要使用正则表达式的解释,请参阅https://regex101.com/r/fW9fX5/1
var num = -1; // set to default value that you intend to use when the string doesn't contain an underscore
var fileNamePattern = new Regex(@".*_(?<num>\d+)\..*");
var regexMatch = fileNamePattern.Match("Something_2.zip");
if (regexMatch.Success)
{
int.TryParse(regexMatch.Groups["num"].Value, out num);
}