//SqlNewsProvider.cs 
该函数下面的这句语句有问题
List<NewsItem> list = List<NewsItem>();
应该改成
List<NewsItem> list = new List<NewsItem>();

解决方案 »

  1.   

     public override List<NewsItem> GetNews(string categoryId)
      {
         List<NewsItem> list = List<NewsItem>();
    =====================
    list没有被实例化
      

  2.   

     public   override   List <NewsItem>   GetNews(string   categoryId) 
        { 
              List <NewsItem>   list   =   List <NewsItem> (); 
    ===================== 
    list没有被实例化
    这种情况在编译时应该有警告吧
      

  3.   

    public static class News
    {
       private static NewsProvider provider;   public static NewsProvider Provider
       {
          return provider;
       }   public static List<NewsItem> GetNews(string categoryId)
       {
          return provider.GetNews(categoryId);
       }  
    }
    这个类中,provider变量没有被初始化,你没有一个工厂类来创建一个Provider子类来付给该provider,并且该类结构中provider是不能被外部访问的。
      

  4.   

    我想修改帖子,可是没有权限,无奈。你说对了,错误就在这里,provider为null,但是我有一点不懂,静态的对象为什么会这样呢,又不是非静态?
      

  5.   

    //在SmallBusiness中是这样初始化的:private static bool isInitialized = false; 
    private static NewsProvider provider;
    private staitc SmallBusinessDataProviderSection providerSection;public static NewsProvider Provider
    {
      get{
            Initialize();
            return provider;
         }
    }private static void Initialize()
    {
       if (!isInitialized)
       {
          providerSection = (ConfigurationManager.GetSection("SmallBusinessDataProvider")) as SmallBusinessDataProviderSecion;
          if (providerSection == null)
          {
             throw new InvalisOperationException();
          }       provider = ProviderHelper.InstantiateProvider(providerSection.NewsProvider[providerSection.NewsProvider], typeof(NewsProvider)) as NewsProvider;
          
          if (provider == null)
          {
             throw new InvalidOperationException();
          }
          isInitialized = true;
       }
    }我不懂微软的这个Initialize()有什么意思。
      

  6.   

    你没有对你那个对象进行初始化啊。也就是没有没有给那个变量分配内存。要么你就重新设计你的程序的思路,要么有个折衷的办法;
    public static class News
    {
       private static NewsProvider provider;        public static NewsProvider Provider
            {
                get
                {
                    return provider;
                }
                set
                {
                    provider = value;
                }
            }   public static List<NewsItem> GetNews(string categoryId)
       {
           if( provider == null )
           {
               throw new Exception("No Instance is Created!");
           }
          return provider.GetNews(categoryId);
       } 
    }
    public partial class Control_NewsList : System.Web.UI.UserControl
    {
       protected void Page_Load(object sender, EvenArgs e)
       {
          if (!Page.IsPostBack)
          {
             News.Provider = new SqlNewsProvider();
             List<NewsItem> news = News.GetNews(CategoryId);
             this.NewsListGridView.DataSource = news;
             this.NewsListGridView.DataBind();
          }    
       }   private string categoryId;
       public string CategoryId
       {
          get {return categoryId;  }
          set { categoryId = value;}
       }
    }
    这样就不会出现你说的情况,不过如果你不赋值,就会抛出异常的.
      

  7.   

    isInitialized就是一个bool值,用于标志当前你的那个Provider是否已经初始化,     provider = ProviderHelper.InstantiateProvider(providerSection.NewsProvider[providerSection.NewsProvider], typeof(NewsProvider)) as NewsProvider;
    这句话初始化了provider变量。这是一个典型的单例模式,好好跟踪一下程序吧,
    注意isInitialized的值,和provider的值(这个值是一个引用)