如何将字符串变量值的索引导入ObservableCollection?

时间:2014-06-10 13:07:18

标签: c# windows-phone-8 observablecollection

在我的Windows手机应用程序中,我使用如下所示的observablecollection:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.Phone.UserData;
using System.Windows.Media;
using Microsoft.Phone.Maps.Controls;
using System.Collections.ObjectModel;
using System.Collections;

namespace GetContacts
{
    public partial class createGroups : PhoneApplicationPage
    {
        string buttonName = "";
        public static ObservableCollection<Group> groupbtn;

        public createGroups()
        {
            InitializeComponent();
            groupbtn = new ObservableCollection<Group>();        
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            string buttonText = "abc"
            string index = groupbtn.IndexOf(buttonText);                      
        }

    }
}

以下是Group类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using GetContacts.Resources;
using Microsoft.Phone.UserData;

namespace GetContacts
{
    public class Group
    {
        public string Name { get; set; }
        /*public string content { get; set; }
        private string[] numberofbtns = new string[5];
        public string[] NumberOfBtns
        {
            get { return numberofbtns; }
            set { numberofbtns = value; }
        }*/
        //object[] array1 = new object[5];


        public Group()
        { 

        }
        public Group(Button btn)
        {
            Name = btn.Name;

        }
    }
}

但它在下面给我两个错误:

错误1:此行groupbtn.IndexOf(buttonText)

The best overloaded method match for 'System.Collections.ObjectModel.Collection<GetContacts.Group>.IndexOf(GetContacts.Group)' has some invalid arguments

此行groupbtn.IndexOf(buttonText)上的错误2 buttonText

Argument 1: cannot convert from 'string' to 'GetContacts.Group'

如何解决它或者如何建议我如何将字符串变量值的索引转换为observablecollection。 等待你的回复。 感谢。

3 个答案:

答案 0 :(得分:1)

您无法在IndexOf上使用ObservableCollection<Group>字符串。你需要一个Group。您还必须覆盖课程Equals中的Group(同时覆盖GetHashCode):

public class Group
{
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        Group g2 = obj as Group;
        return g2 != null && g2.Name == this.Name;
    }

    public override int GetHashCode()
    {
        return Name == null 0 : Name.GetHashCode();
    }
}

现在您可以使用IndexOf

Group searchGroup = new Group { Name = buttonText };
int index = groupbtn.IndexOf(searchGroup);

或使用不同的方法,例如使用LINQ:

int index = groupbtn
    .Select((g, i) => new { Group = g, Index = i })
    .Where(x => x.Group.Name == buttonText)
    .Select(x => x.Index)
    .DefaultIfEmpty(-1)
    .First();

答案 1 :(得分:0)

那些是同样的错误。问题是您有一个Group类型的集合,然后您尝试找到与Group匹配的string。您必须将Group传递给.IndexOf才能找到您要查找的Group的索引。

您需要从编译器错误中找出这种类型的错误。

The best overloaded method match for 'System.Collections.ObjectModel.Collection<GetContacts.Group>.IndexOf(GetContacts.Group)' has some invalid arguments

这显然意味着它不喜欢您传递给此函数的参数。它显示了函数定义,因此您可以告诉它想要传递Group

Argument 1: cannot convert from 'string' to 'GetContacts.Group'

您正在将string传递给我们知道接受Group的函数。由于它只接受Group,因此会尝试将string隐式转换为Group,但它没有办法自动执行此操作。

答案 2 :(得分:0)

IndexOf方法期待一个Group对象,但是你提供了一个字符串。 ObservableCollections实现IEnumerable,因此您可以使用Linq表达式。比如...

Group btnGroup = (from g in groupbtn where g.Name == "name" select g).First();
int indexOfGroupButton = groupbtn.IndexOf(btnGroup);

或类似的东西。基本上,您首先需要找到实际的“Group”对象,然后才能找到该对象的索引。