gpt4 book ai didi

c# - 有条件地分配 C# var : As elegant as it gets?

转载 作者:太空狗 更新时间:2023-10-30 00:36:25 25 4
gpt4 key购买 nike

我理解 C# 关键字 var 在编译时暗示类型,因此需要在同一位置进行声明和赋值,从而使以下构造非法:

var something;

if (condition)
{
something=1;
}
else
{
something = 0;
}

即使 C# 编译器基本上可以确定当前作用域中的所有赋值都产生相同的类型,但它(目前)不会,因此会产生编译时错误。

在 LINQ 中使用 var 时,有时我想根据程序条件稍微不同地初始化我的结果变量。我发现的方法是使用 ?: 运算符,如:

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# - 有条件地分配 C# var : As elegant as it gets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com