CS0120 非静态字段、方法或属性'Group.Title'需要对象引用



我对UWP应用程序有问题,并创建了一个收藏夹页面,该页面允许用户在页面上重新排序并保存数据。我两次遇到同样的错误

cs0120非静态字段,方法或属性'group.title'

需要一个对象引用

cs0120非静态字段,方法或属性'group.items'

需要一个对象引用

任何人都可以向我解释为什么会发生这种情况,谢谢。

CS文件


using App1.Common;
using App1.Data;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Windows.Storage;
using Windows.UI.Popups;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using System.Linq;
using System.Threading.Tasks;
using Windows.Data.Json;

namespace App1
{
public sealed partial class test : Page
{
    public ObservableCollection<ItemData> Items { get; set; }
    private ObservableDictionary defaultViewModel = new 
    ObservableDictionary();
    private NavigationHelper navigationHelper;
    private RootObject jsonLines;
    private StorageFile fileFavourites;
    private Dictionary<string, ItemData> ItemData = new Dictionary<string, 
    ItemData>();

    public test()
    {
    loadJson();
    getFavoritesFile();
    this.InitializeComponent();
    this.navigationHelper = new NavigationHelper(this);
    this.navigationHelper.LoadState += navigationHelper_LoadState;
    }
    void ItemView_ItemClick(object sender, ItemClickEventArgs e)
    {
        // Navigate to the appropriate destination page, configuring the new 
        page
        // by passing required information as a navigation parameter
        var itemId = ((SampleDataItem)e.ClickedItem).UniqueId;
        this.Frame.Navigate(typeof(GroupedItemsPage), itemId);
    }
    private void setupObservableCollection()
        {
            Items = new ObservableCollection<ItemData>(ItemData.Values);
            itemGridView.ItemsSource = Items;
        }
        private async void loadJson()
        {
            var file = await StorageFile.GetFileFromApplicationUriAsync(new 
            Uri("ms-appx:///DataModel/SampleData.json"));
            var lines = await FileIO.ReadTextAsync(file);
            jsonLines = JsonConvert.DeserializeObject<RootObject>(lines);
            feedItems();
        }
        private async void getFavoritesFile()
        {
            Windows.Storage.StorageFolder storageFolder = 
            Windows.Storage.ApplicationData.Current.LocalFolder;
            fileFavourites = await storageFolder.GetFileAsync("Fav.txt");
        }
        private async void feedItems()
        {
            if (await FileIO.ReadTextAsync(fileFavourites) != "")
            {
                foreach (var line in await 
                FileIO.ReadLinesAsync(fileFavourites))
                {
                    foreach (var Group in jsonLines.Groups)
                    {
                    foreach (var Item in Group.Items)
                    {
                        if (Item.UniqueId == line)
                        {
                            var storage = new ItemData()
                            {
                                Title = Item.Title,
                                UniqueID = Item.UniqueId,
                                ImagePath = Item.ImagePath,
                                Group = Group.Title
                            };
                            ItemData.Add(storage.UniqueID, storage);
                        }
                    }
                }
                }
            }
            else
            {//if favourites file is empty, use?
            foreach (var Group in jsonLines.Groups) ;
            {
                foreach (var Item in Group.Items)
                {
                    var storage = new ItemData()
                    {
                        Title = Item.Title,
                        UniqueID = Item.UniqueId,
                        ImagePath = Item.ImagePath,
                        Group = Group.Title
                    };
                    ItemData.Add(storage.UniqueID, storage);
                    await FileIO.AppendTextAsync(fileFavourites, 
                    Item.UniqueId + "rn");
                }
            }
        }

        setupObservableCollection();
        }

        public ObservableDictionary DefaultViewModel
        {
            get { return this.defaultViewModel; }
        }
        #region NavigationHelper loader
        public NavigationHelper NavigationHelper
        {
            get { return this.navigationHelper; }
        }
        private async void MessageBox(string Message)
        {
            MessageDialog dialog = new MessageDialog(Message);
            await dialog.ShowAsync();
        }
        private async void navigationHelper_LoadState(object sender, 
        LoadStateEventArgs e)
        {
            var sampleDataGroups = await SampleDataSource.GetGroupsAsync();
            this.defaultViewModel["Groups"] = sampleDataGroups;
        }
        #endregion NavigationHelper loader
        #region NavigationHelper registration
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            navigationHelper.OnNavigatedFrom(e);
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            navigationHelper.OnNavigatedTo(e);
        }
        #endregion NavigationHelper registration
    }
    public class ItemData
    {
        public string UniqueID { get; set; }
        public string Title { get; set; }
        public string Group { get; set; }
        public string ImagePath { get; set; }
    }
}

rootObject文件

using App1.Data;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace App1
{
public class Item
{
    public string UniqueId { get; set; }
    public string Title { get; set; }
    public string Subtitle { get; set; }
    public string ImagePath { get; set; }
    public string Description { get; set; }
    public string Content { get; set; }
}
public class Group
{
    public string UniqueId { get; set; }
    public string Title { get; set; }
    public string Subtitle { get; set; }
    public string ImagePath { get; set; }
    public string Description { get; set; }
    public List<Item> Items { get; set; }
}
public class RootObject
{
    public List<Group> Groups { get; set; }
}  
}

问题出现在您的foreach循环中。实际上,有两个问题:

  1. 您将Group用作迭代变量,这是可能的,但会导致类名称Group
  2. 实例化new ItemData时,您突然使用Group.Title而不是Item.Title

因此,循环的更正版本看起来像这样:

foreach (var group in jsonLines.Groups) ;
{
    foreach (var item in group.Items)
    {
        var storage = new ItemData()
        {
            Title = item.Title,
            UniqueID = item.UniqueId,
            ImagePath = item.ImagePath,
            Group = item.Title
         };
         ItemData.Add(storage.UniqueID, storage);
         await FileIO.AppendTextAsync(fileFavourites, 
                Item.UniqueId + "rn");
     }
 }

我将循环变量Group更改为较低案例group。我也将第二个循环变量Item更改为较低案例,这在您的情况下不是必需的,但最好符合C#命名约定。

在您的foreach中,您应该使用其他名称而不是组,因为它与班级的名称冲突。小写组将起作用。

相关内容

  • 没有找到相关文章

最新更新