比较int.TryParse结果的值
问题描述:
我觉得有点傻这么问,因为我错过了一些非常容易的事情,或者根本不了解tryParse函数。比较int.TryParse结果的值
在laymans术语中,我想在下面的代码中执行的操作是让代码循环遍历datagridview中的所有列。如果列名的最后2个字符是数字,那么我想将最后2个字符的数字值(使用int.TryParse)与另一个变量进行比较。基本上我想让所有的列只读为那些最后2位数字可以转换为整数并且该整数大于可比较的可比值的列的excpet。
我的代码下面可能有点平凡,因为我试图通过一步一步的设置int_tryParse之前的变量,但我可以在以后修复。
C#,VS2008:
foreach (DataGridViewColumn col in grd1.Columns)
{
string myCol = col.Name;
int myColLength = col.Name.Length;
string myColMonth = myCol.Substring(myColLength - 2);
if (int.TryParse(myColMonth, out myColMonth) <= myMostRecentActualMonth)
{
col.ReadOnly = true;
}
else
{
col.ReadOnly = false;
}
}
答
TryParse
该方法返回一个Boolean
值,指示如果解析成功与否。如果是这样,它将输出参数设置为解析值。
所以你会希望是这样的:
int parsedMonth; // This will get set if myColMonth is a valid integer
if (int.TryParse(myColMonth, out parsedMonth) && parsedMonth <= myMostRecentActualMonth)
{
// ...
}
答
int.TryParse
具有BOOL返回类型:
尝试从这里去:
foreach (DataGridViewColumn col in grd1.Columns)
{
string myCol = col.Name;
int myColLength = col.Name.Length;
string myColMonth = myCol.Substring(myColLength - 2);
int myIntColMonth;
if (int.TryParse(myColMonth, out myIntColMonth)
&& myIntColMonth <= myMostRecentActualMonth)
{
col.ReadOnly = true;
}
else
{
col.ReadOnly = false;
}
}
答
你可以重写代码像这样,首先你需要另外一个int
值,你应该把你的解析值存储到这个值中,然后检查这个值是否低于myMostRecentActualMonth
foreach (DataGridViewColumn col in grd1.Columns)
{
string myCol = col.Name;
int myColLength = col.Name.Length;
string myColMonth = myCol.Substring(myColLength - 2);
int myColMonthIntValue = int.MaxValue;
if (int.TryParse(myColMonth, out myColMonthIntValue) && myColMonthIntValue <= myMostRecentActualMonth)
{
col.ReadOnly = true;
}
else
{
col.ReadOnly = false;
}
}
答
TryParse
返回一个布尔值,指示转换是否成功。你不想比较TryParse
(你在做什么)的结果,而是想与你传入的变量进行比较。
所以; if(int.TryParse(myColMonth,out myColMonth)< = myMostRecentActualMonth)
需要成为;
if (int.TryParse(myColMonth, out myColMonth)
if (myColMonth <= myMostRecentActualMonth)
首先检查你解析出一个int,然后做比较。
答
foreach (DataGridViewColumn col in grd1.Columns)
{
string myCol = col.Name;
int myColLength = col.Name.Length;
string myColMonth = myCol.Substring(myColLength - 2);
int myColMonthInt = 0;
if (int.TryParse(myColMonth, out myColMonthInt))
{
if (myColMonthInt <= myMostRecentActualMonth)
{
col.ReadOnly = true;
}
else
{
col.ReadOnly = false;
}
}
else
{
// what do you want to do is last two chars can't be converted to int?
col.ReadOnly = true;
}
}
谢谢迈克。本质上,我想出了一个类似的解决方案,因为当你知道40分钟的工作后,我知道我发布它后10分钟(叹气) – 2013-03-14 19:16:15
@RyanWard - 实际上,我在StackOverflow上发布问题的一个重要原因是因为它保证我会在30秒后自行解决。 – 2013-03-14 19:17:53