首页 / C# / 有条件地分配C#var:它是否优雅?
有条件地分配C#var:它是否优雅?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了有条件地分配C#var:它是否优雅?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1243字,纯文字阅读大概需要2分钟。
内容图文
![有条件地分配C#var:它是否优雅?](/upload/InfoBanner/zyjiaocheng/807/50eeea1a117d4d29a0eef97622f14684.jpg)
我理解C#关键字var在编译时隐含类型,因此需要在同一位置声明和赋值,使以下构造非法:
var something;
if (condition)
{
something=1;
}
else
{
something = 0;
}
尽管C#编译器可以主要确定当前作用域中的所有赋值都是相同的类型,但它(当前)却没有,因此会生成编译时错误.
在将LIN与LINQ一起使用时,我有时希望根据程序条件略微不同地初始化我的结果变量.我发现的方法是使用?:运算符,如:
var participants = (email == null ?
(from part in db.Participant
where part.SequenceNumber == seqNr
select part)
:
(from part in db.Participant
where part.EmailAddress == email
select part));
如果我只有两个可能的任务,那就足够了,但如果有多个可能的任务,很快就会变得笨拙.
有更优雅的方法吗?
解决方法:
您可以使用.Where(…)而不是查询语法:
var participants = email == null
? db.Participant.Where(p => p.SequenceNumber == seqNr)
: db.Participant.Where(p => p.EmailAddress == email);
但就我个人而言,我根本不会在这里使用var – 它不会超过2,但这是一个经典的“搜索”模式.我可能会用:
IQueryable<Part> query = db.Participant;
if(email != null) query = query.Where(p => p.EmailAddress == email);
if(seqNr != null) query = query.Where(p => p.SequenceNumber == seqNr);
...
// consume query
这允许组合多个条件(在这种情况下为“AND”)以用于更具体的查询.你也可以做“或”,但它稍微复杂一些(除非你使用Concat / Union,这很麻烦).
内容总结
以上是互联网集市为您收集整理的有条件地分配C#var:它是否优雅?全部内容,希望文章能够帮你解决有条件地分配C#var:它是否优雅?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。