我可以在c#中使用var而不进行初始化吗?

我可以在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

问题在代码中的第一条注释中定义, 我应该在这里设置什么值,以便在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.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块中我可以设置另一个值”,这就是问题所问的。两次