我可以在c#中使用var而不进行初始化吗?
问题在代码中的第一条注释中定义, 我应该在这里设置什么值,以便在try块中设置另一个值我可以在c#中使用var而不进行初始化吗?,c#,C#,问题在代码中的第一条注释中定义, 我应该在这里设置什么值,以便在try块中设置另一个值 var candidate_MNA = // what value should I set here so in try block I can set another value try { candidate_MNA = (from c in db.ms_cadidate join h in db.ms_halqa on c.candid
var candidate_MNA = // what value should I set here so in try block I can set another value
try
{
candidate_MNA =
(from c in db.ms_cadidate
join h in db.ms_halqa
on c.candidate_halqa_id equals h.halqa_id
join p in db.ms_party
on c.candidate_party_id equals p.party_id
where h.halqa_id == SessionWrapper.user.user_halqa_id && c.candidate_type == "1"
select new
{
candidate_id = c.candidate_id,
halqa = h.halqa_no,
fname = c.candidate_fname,
party = p.party_name,
partyFlag = p.party_flag,
}).FirstOrDefault();
}
不,您不能这样做,因为
var
从表达式的右侧解析其类型。您可以使用所需的属性创建DTO
:
public class CandidateDTO
{
public int candidate_id {get;set;}
public int halqa {get; set; }
.............
............
}
然后在linq查询中使用该类型的对象:
select new CandidateDTO
{
candidate_id = c.candidate_id,
halqa = halqa_no,
..............
..............
}
现在您可以在try
之外使用变量,如:
CandidateDTO candidate_MNA = null;
这是可能的,但很混乱:
var candidate_MNA = new
{
candidate_id = default(int),
halqa = default(int),
fname = default(string),
party = default(string),
partyFlag = default(PartyFlag)
};
我建议您可以通过更改定义或使用
candidate\u MNA
的位置来做得更好。不,如果没有初始化,您不能使用var
。当然,您不能使用var
,因为当时还不清楚var
是什么类型的占位符。您必须用正确的类型声明它。如果是匿名类型,则不能。创建一个类候选者或类似的that@john是的,但是把try
块想象成if
。。。这个任务可能永远都无法完成,或者在finally
中可能会有另一个任务,这将给候选人提供另一种类型…@Rafalon哦,不,我完全明白了。您仍然必须将其初始化为null。但是编译器可以假设它是代码中第一个潜在赋值的类型。我认为这将是一个糟糕的想法,因为它可能会使代码难以阅读(出于您指定的原因)。我只是说,我也许可以理解为什么穆罕默德认为这是可能的。@john right,或者甚至是object
或类似的东西,但是nowell这初始化候选者,不是吗?请解释一下初始化是如何不初始化变量的,我收回它。这是我读过的最糟糕的代码。@CamiloTerevinto也许你也可以读这个问题,而不仅仅是标题?@Servy我不想在不初始化的情况下演示如何做。我声称要演示“我应该在这里设置什么值,以便在try块中我可以设置另一个值”,这就是问题所问的。两次