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

时间:2018-04-03 14:19:48

标签: 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.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();
}

2 个答案:

答案 0 :(得分:6)

不,你不能这样做是因为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;

答案 1 :(得分:-6)

这是可能的,但很麻烦:

mt-5

我建议您通过更改定义或使用var candidate_MNA = new { candidate_id = default(int), halqa = default(int), fname = default(string), party = default(string), partyFlag = default(PartyFlag) }; 的位置来做得更好。