【问题标题】:Why can't I add this entry to my dictionary?为什么我不能将此条目添加到我的字典中?
【发布时间】:2014-12-24 14:07:39
【问题描述】:

我正在尝试制作一个应用程序,该应用程序通过文本框获取和输入 URL,在单击按钮时检索该网站的 HtmlCode,并将两者存储在字典中,然后显示在列表框中。

但是,由于在尝试将条目添加到字典时出现问题,我还无法在用户界面中实现其中的任何一个。为了检索 HtmlCode,我调用了 GetHtml 方法,但在尝试将网站和代码添加到字典时出现错误。

代码跟随

namespace HtmlCheck
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

            var dict = new SortedDictionary<string, WebsiteInfo>();

            var list = (from entry in dict
                        orderby entry.Key
                        select entry.Key).ToList();

        }

        private static void addPerson(string websiteUrl)
        {
            dict.Add(websiteUrl, new WebsiteInfo { WebsiteUrl = websiteUrl, HtmlCode = getHtml(websiteUrl) });
        }

        private static SortedDictionary<string, WebsiteInfo> dict;

        public string getHtml(string websiteUrl)
        {
            using (WebClient client = new WebClient())
                return client.DownloadString(websiteUrl);
        }
    }

    public class WebsiteInfo
    {
        public string WebsiteUrl;
        public string HtmlCode;

        public override string ToString()
        {
            string formated = string.Format("{0}\n---------------------------------- \n{1}", WebsiteUrl, HtmlCode);
            return formated;
        }
    }
}

在方法中

        private static void addPerson(string websiteUrl)
        {
            dict.Add(websiteUrl, new WebsiteInfo { WebsiteUrl = websiteUrl, HtmlCode = getHtml(websiteUrl) });
        }

HtmlCode = getHtml(websiteUrl) 抛出错误:

"An object reference is required for the non-static field, method, or property 'HtmlCheck.Program.getHtml(string)'"

所以我的问题是,为什么我不能在字典中添加包含这些信息的条目?

感谢您的宝贵时间。

【问题讨论】:

  • getHtml 不是静态方法。所以你需要构造一个 Program 对象来调用它。我认为您只想在该方法中添加静态关键字。

标签: c# winforms list object dictionary


【解决方案1】:

addPerson() 是一个静态 方法,这意味着您可以随时调用它,而无需调用它的类的实例。然后它会尝试调用getHtml(),这是非静态的,这意味着它只能通过类的有效实例来调用。

我建议您对 C# 中的静态方法进行一些研究以了解这一点。

【讨论】:

    【解决方案2】:

    在您的方法中添加“静态”;

            public static string getHtml(string websiteUrl)
    

    【讨论】:

      【解决方案3】:

      您收到该错误是因为 addPerson() 是一个静态方法(在没有创建 Program 类的实例的情况下调用它),但 getHtml() 方法不是静态的(所以你需要一个 Program 类的实例来调用它)。

      轻松修复 - 也将其设为静态:

      public static string getHtml(string websiteUrl)
      {
          ...
      }
      

      为了完整起见,您必须在调用getHtml() 方法之前创建Program 类的实例:

      private static void addPerson(string websiteUrl)
      {
          var p = new Program();
          dict.Add(websiteUrl, new WebsiteInfo { WebsiteUrl = websiteUrl, HtmlCode = p.getHtml(websiteUrl) });
      }
      

      【讨论】:

        猜你喜欢
        • 2020-10-06
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多