加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么int.TryParse无法初始化多个变量

发布时间:2020-12-15 23:39:24 所属栏目:百科 来源:网络整理
导读:我使用int.TryParse来解析变量(在数据库中保存为字符串),我很好奇为什么我不能初始化2个变量: int min,max; 使用以下条件语句: bool lengthCompatible = int.TryParse(string1,out min) int.TryParse(string2,out max); Visual Studio(2015)生成以下代码突
我使用int.TryParse来解析变量(在数据库中保存为字符串),我很好奇为什么我不能初始化2个变量:

int min,max;

使用以下条件语句:

bool lengthCompatible = int.TryParse(string1,out min) &&
                        int.TryParse(string2,out max);

Visual Studio(2015)生成以下代码突出显示:

Use of unassigned local variable ‘max’

Local variable ‘max’ might not be initialized before accessing

但是,如果我使用2个条件语句:

bool minParse = int.TryParse(sentenceType.MinimumLength,out min);
bool maxParse = int.TryParse(sentenceType.MaximumLength,out max);

我可以编译没有错误.

Curiouser和curiouser!有任何见解赞赏.

干杯

解决方法

那么你正在使用&&,这是短路的…如果int.TryParse(string1,out min)返回false,则不会对int.TryParse进行第二次调用,因此max不是绝对的分配.

你可以写:

if (int.TryParse(string1,out min) &&
    int.TryParse(string2,out max))
{
    // Use min and max here
}

…因为那时编译器知道如果两个调用都已执行,则只到达if语句的主体.

或者你可以使用带有&的非短路版本.而不是&&

bool lengthCompatible = int.TryParse(string1,out min) &
                        int.TryParse(string2,out max);

虽然这有点不寻常.上面if版本的优点是你将保留&&的性能优势,因为如果你不需要,你就不会费心去解析string2. (当然,这取决于你正在尝试做什么.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读