在C#MVC中分配Varible的正确方法

时间:2017-06-25 18:00:09

标签: c# asp.net asp.net-mvc

在关注控制器上我无法分配名为“电子邮件”的变量。我在这个变量上遇到错误。请检查picture1 picture2以便更好地了解。问题是如何解决这个错误的呢?

//[HttpPost]
        [HttpPost, ValidateInput(false)]
        public ActionResult EmailCampaignProcess(FormCollection collection)
        {
            var Emails;
            var userType = Request["userType"];
            var emailContent = Request["emailContent"];

            if (userType == "subscriber")
            {
                Emails = db.Users.Where(d => d.Subscriptions.Any(x => x.Status == true)).Select(u => u.Email).ToArray();
            }
            else if(userType == "unsubscriber")
            {
                Emails = db.Users.Where(d => d.Subscriptions.Any(x => x.Status == false)).Select(u => u.Email).ToArray();
            }
            else if (userType == "protentialClient")
            {
                Emails = db.Users.Where(d => d.Subscriptions.Any(x => x.Status == false)).Select(u => u.Email).ToArray();
            }


            foreach (string Email in Emails) {

                SendSimpleMessage(Email);

            }

            return HttpNotFound();

        }

4 个答案:

答案 0 :(得分:1)

在C#中,我认为你必须声明你声明的变量的实际类型。将它改为

string[] Emails;

解决你的问题?

答案 1 :(得分:1)

首先,var Emails;导致了此错误:

  

必须初始化隐式类型的局部变量。

这意味着您无法在不初始化值的情况下使用var定义变量,因为type of value定义了type of variable,因此您可以将其初始化为:

string[] Emails = null;

var Emails = new string[] { };

之后,因为您的if-else if结构中没有其他内容,您必须使用非值数据进行初始化,例如第二个。

答案 2 :(得分:0)

虽然您可以使用Tim Leach的答案解决您所描述的问题,但是当您循环浏览电子邮件时,可能会在以后遇到NullReference错误。毕竟,如果出于任何原因userType不是您编程的三个选项,则不会分配任何电子邮件。

因此,您可以考虑

var Emails = new string[0];

或者只是在userType上添加一个测试,或者在你的foreach之前进行一次空检查。

另外,请考虑遵循标准命名约定,这意味着您的变量应为emails,而不是Emails

最后,考虑通过执行类似

的操作来简化重复代码
var status = userType == "subscriber";
var emails = Emails = db.Users.Where(d => d.Subscriptions.Any(x => x.Status == status)).Select(u => u.Email).ToArray();

现在您不再需要单独的声明,并且可以删除三个if语句。

答案 3 :(得分:0)

使用OnElementChanged仅在声明并为变量赋值时起作用,并且可以从表达式中推断出值的类型。

在这种情况下,编译器无法知道要分配给Emails变量的值。

从下面的代码判断为值赋值给变量,您应该将其声明为其他答案所建议的字符串数组。

var