在我的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。 等待你的回复。 感谢。
答案 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”对象,然后才能找到该对象的索引。