【问题标题】:does the MailMessage require any setting to initialize?MailMessage 需要任何设置来初始化吗?
【发布时间】:2016-11-21 12:37:14
【问题描述】:

在我的控制台程序中,我想使用System.Net.Mail.MailMessage 向某人发送电子邮件。但是,我无法初始化它:(

命名空间:

using System.Net;
using System.Net.Mail;

代码:

class emailHelper
{
    string to = "jane@address.com";
    string from = "ben@address.com";
    MailMessage message = new MailMessage(from, to);// errors here
}

错误信息是关于:

字段初始值设定项不能引用非静态字段、方法或 属性“programA.emailHelper.from”

字段初始值设定项不能引用非静态字段、方法或 属性“programA.emailHelper.to”

我不知道在使用 MailMessage 之前我是否遗漏了一些要设置的内容。

有什么想法吗?

【问题讨论】:

    标签: c# php


    【解决方案1】:

    错误消息为您提供所有信息。

    字段初始值设定项不能引用非静态字段、方法或 属性

    所以如果你想让它工作,你应该让你的字符串字段是静态的。我怀疑这是你想要的。

    class emailHelper
    {
        static string to = "jane@address.com";
        static string from = "ben@address.com";
        MailMessage message = new MailMessage(from, to);// errors here
    }
    

    就像我说的那样,这不是您希望从一种辅助方法中获得的静态往返地址。您的代码应如下所示:

    public class EmailHelper
    {
        public string To {get; set;}
        public string From {get; set;}
        public MailMessage message {get; set;}
    
        public EmailHelper(string to, string from)
        {
             To = to;
             From = from;
    
             message = new MailMessage(from, to);
        }
    
    }
    

    在这种情况下,您有来自帮助程序的地址,您可以创建多个 MailMessage 类。

    【讨论】:

      【解决方案2】:

      如错误信息所述

      字段初始值设定项不能引用非静态字段、方法或 属性

      这意味着您不能使用一个字段来初始化另一个字段。但是你可以在这里使用构造函数,你的类实现如下:

      class emailHelper
      {
          string to = "jane@address.com";
          string from = "ben@address.com";
          MailMessage message; // Declare here
          public emailHelper() // Constructor
          {
              message = new MailMessage(from, to);//initialize here
          }
      }
      

      或者像这样使用只读属性获取器:

      public MailMessage Message
      {
          get { return new MailMessage(from, to); }
      }
      

      【讨论】:

        【解决方案3】:

        字段初始值设定项不能引用非静态字段、方法或 属性 'field' 实例字段不能用于初始化其他 方法外的实例字段。如果您尝试初始化一个 方法外的变量,考虑执行初始化 在类构造函数中

        查看文档:Compiler Error CS0236

        // CS0236.cs
        public class MyClass
        {
           public int i = 5;
           public int j = i;  // CS0236
           public int k;      // initialize in constructor
        
           MyClass()
           {
              k = i;
           }
        
           public static void Main()
           {
           }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-23
          • 1970-01-01
          • 1970-01-01
          • 2020-09-16
          • 2018-12-02
          相关资源
          最近更新 更多