C# 如何通过使用其他属性筛选可观察集合来检索类的属性?
我正在VS2015社区上开发一个UWP应用程序,我做了一个班级候选人和另一个班级候选人经理。在CandidateManager类中,我创建了一个方法getCandidateByCategory,以按类别号和序列号对候选对象进行排序。我在ScienceAndITClub.Xaml.cs页面上调用了该方法,但现在检索筛选项的name属性时遇到问题(要将其设置为RBcand1 radiobutton的内容),“.”下有一条红线,显示错误“运算符”。“不能应用于“void”类型的操作数。”。而且,总是只有一个候选人有一组特定的类别号和序列号 这里是Science&ITClub.Xaml.cs:C# 如何通过使用其他属性筛选可观察集合来检索类的属性?,c#,class,uwp,C#,Class,Uwp,我正在VS2015社区上开发一个UWP应用程序,我做了一个班级候选人和另一个班级候选人经理。在CandidateManager类中,我创建了一个方法getCandidateByCategory,以按类别号和序列号对候选对象进行排序。我在ScienceAndITClub.Xaml.cs页面上调用了该方法,但现在检索筛选项的name属性时遇到问题(要将其设置为RBcand1 radiobutton的内容),“.”下有一条红线,显示错误“运算符”。“不能应用于“void”类型的操作数。”。而且,总是只
public sealed partial class ScienceAndITClub : Page
{
private ObservableCollection<Candidate> Candidates;
public ScienceAndITClub()
{
this.InitializeComponent();
CandidateManager.GetAllCandidates(Candidates);
var v = new Candidate();
v = (CandidateManager.GetCandidatesByCategory(Candidates, CandidateCategoryNo.I, CandidateSNo.I).ToList<Candidate>);
string cand1name = v.Name;
RBcand1.Content = cand1name;
}
private void NextButton_Click(object sender, RoutedEventArgs e)
{
}
}
以下是CandidateManager类的代码,即CandidateManager.cs:
class CandidateManager
{
公共静态void GetAllCandidates(ObservableCollection候选者)
{
var allCandidates=getCandidate();
候选人;
allCandidates.ForEach(p=>candidates.Add(p));
}
public static void GetCandidatesByCategory(可观察到的集合候选对象、候选类别YNO候选类别、候选类别NO Sno)
{
var allCandidates=getCandidate();
var filteredCandidates=allCandidates.Where(p=>p.Category_no==candidateCategory.ToList();
filteredCandidates=allCandidates.Where(p=>p.S_no==Sno.ToList();
候选人;
filteredCandidates.ForEach(p=>candidates.Add(p));
}
私有静态列表getCandidate()
{
var_candidate=新列表();
_添加(新候选人(){S_no=CandidateSNo.I,Category_no=CandidateCategoryNo.I,VoteCount=0,Category=“科学与IT俱乐部”,Name=“A”});
_添加(新候选人(){S_no=CandidateSNo.II,Category_no=CandidateCategoryNo.I,VoteCount=0,Category=“科学与IT俱乐部”,Name=“B”});
_添加(新候选人(){S_no=CandidateSNo.III,Category_no=CandidateCategoryNo.I,VoteCount=0,Category=“科学与IT俱乐部”,Name=“C”});
_添加(新候选人(){S_no=CandidateSNo.I,Category_no=CandidateCategoryNo.II,VoteCount=0,Category=“Dance Club”,Name=“D”});
_添加(新候选人(){S_no=CandidateSNo.II,Category_no=CandidateCategoryNo.II,VoteCount=0,Category=“Dance Club”,Name=“E”});
_添加(新候选人(){S_no=CandidateSNo.III,Category_no=CandidateCategoryNo.II,VoteCount=0,Category=“Dance Club”,Name=“F”});
_添加(新候选人(){S_no=CandidateSNo.I,Category_no=CandidateCategoryNo.III,VoteCount=0,Category=“Music Club”,Name=“G”});
_添加(新候选人(){S_no=CandidateSNo.II,Category_no=CandidateCategoryNo.III,VoteCount=0,Category=“Music Club”,Name=“H”});
_添加(新候选人(){S_no=CandidateSNo.III,Category_no=CandidateCategoryNo.III,VoteCount=0,Category=“Music Club”,Name=“I”});
_添加(新候选人(){S_no=CandidateSNo.I,Category_no=CandidateCategoryNo.IV,VoteCount=0,Category=“社会服务俱乐部”,Name=“J”});
_添加(新候选人(){S_no=CandidateSNo.II,Category_no=CandidateCategoryNo.IV,VoteCount=0,Category=“社会服务俱乐部”,Name=“K”});
_添加(新候选人(){S_no=CandidateSNo.III,Category_no=CandidateCategoryNo.IV,VoteCount=0,Category=“社会服务俱乐部”,Name=“L”});
_添加(新候选人(){S_no=CandidateSNo.I,Category_no=CandidateCategoryNo.V,VoteCount=0,Category=“Sports Club”,Name=“M”});
_添加(新候选人(){S_no=CandidateSNo.II,Category_no=CandidateCategoryNo.V,VoteCount=0,Category=“Sports Club”,Name=“N”});
_添加(新候选人(){S_no=CandidateSNo.III,Category_no=CandidateCategoryNo.V,VoteCount=0,Category=“Sports Club”,Name=“O”});
_添加(新候选人(){S_no=CandidateSNo.I,Category_no=CandidateCategoryNo.VI,VoteCount=0,Category=“School Captain”,Name=“P”});
_添加(新候选人(){S_no=CandidateSNo.II,Category_no=CandidateCategoryNo.VI,VoteCount=0,Category=“School Captain”,Name=“Q”});
_添加(新候选人(){S_no=CandidateSNo.III,Category_no=CandidateCategoryNo.VI,VoteCount=0,Category=“School Captain”,Name=“R”});
返回(u)候选人;;
}
}
另外,在这个程序中,我将把候选人的名字作为用户的输入(我还没有设计这个函数,所以我把所有的名字都放在字母表中),所以你能告诉我如何将文本框中的输入转换为候选人的name属性吗
希望你能帮助。。。谢谢,祝你今天愉快!:) 您正在传入collection对象并在“filtering”中修改它。因此,在您的情况下,您可以调用该方法,这将改变ScienceAndITClub页面的集合,因此从中读取。如果使用.FirstOrDefault(),它将为您提供第一个条目(您只需要一个条目),如果集合中没有任何条目,则为null 这应该解决您的错误问题。然而,一旦您开始取回数据,您将看到更多的问题
public sealed partial class MainPage : Page
{
private ObservableCollection<Candidate> Candidates = new ObservableCollection<Candidate>();
public MainPage()
{
this.InitializeComponent();
CandidateManager.GetAllCandidates(Candidates);
//this line alters the Candidates collection
CandidateManager.GetCandidatesByCategory(Candidates, CandidateCategoryNo.I, CandidateSNo.I);
//now that the method is done, you can use the Candidates collection to get the results
var v = Candidates.FirstOrDefault(); //will get first candidate, or null if collection is empty
string cand1name = v.Name;
RBcand1.Content = cand1name;
}
}
感谢Mark,但现在在CandidateManager.cs的“candidates.Clear();”行上,它在调试时显示了一个错误:“SchoolElection.exe中发生了“System.NullReferenceException”类型的异常,但未在用户代码中处理”,这是因为它从未分配给。。。我用上面示例中的“=new ObservableCollection();行克服了这个问题。非常感谢Mark,我知道我已经浪费了你足够的时间,但是请你告诉我GetCandidateData方法中的代码是什么。它在帖子中…它与你的getCandidate()方法相同。。
class CandidateManager
{
public static void GetAllCandidates(ObservableCollection<Candidate> candidates)
{
var allCandidates = getCandidate();
candidates.Clear();
allCandidates.ForEach(p => candidates.Add(p));
}
public static void GetCandidatesByCategory(ObservableCollection<Candidate> candidates, CandidateCategoryNo candidateCategory, CandidateSNo Sno)
{
var allCandidates = getCandidate();
var filteredCandidates = allCandidates.Where(p => p.Category_no == candidateCategory).ToList();
filteredCandidates = allCandidates.Where(p => p.S_no == Sno).ToList();
candidates.Clear();
filteredCandidates.ForEach(p => candidates.Add(p));
}
private static List<Candidate> getCandidate()
{
var _candidate = new List<Candidate>();
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.I, VoteCount = 0, Category = "Science and IT Club", Name = "A" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.I, VoteCount = 0, Category = "Science and IT Club", Name = "B" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.I, VoteCount = 0, Category = "Science and IT Club", Name = "C" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.II, VoteCount = 0, Category = "Dance Club", Name = "D" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.II, VoteCount = 0, Category = "Dance Club", Name = "E" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.II, VoteCount = 0, Category = "Dance Club", Name = "F" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.III, VoteCount = 0, Category = "Music Club", Name = "G" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.III, VoteCount = 0, Category = "Music Club", Name = "H" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.III, VoteCount = 0, Category = "Music Club", Name = "I" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.IV, VoteCount = 0, Category = "Social Service Club", Name = "J" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.IV, VoteCount = 0, Category = "Social Service Club", Name = "K" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.IV, VoteCount = 0, Category = "Social Service Club", Name = "L" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.V, VoteCount = 0, Category = "Sports Club", Name = "M" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.V, VoteCount = 0, Category = "Sports Club", Name = "N" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.V, VoteCount = 0, Category = "Sports Club", Name = "O" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.VI, VoteCount = 0, Category = "School Captain", Name = "P" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.VI, VoteCount = 0, Category = "School Captain", Name = "Q" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.VI, VoteCount = 0, Category = "School Captain", Name = "R" });
return _candidate;
}
}
public sealed partial class MainPage : Page
{
private ObservableCollection<Candidate> Candidates = new ObservableCollection<Candidate>();
public MainPage()
{
this.InitializeComponent();
CandidateManager.GetAllCandidates(Candidates);
//this line alters the Candidates collection
CandidateManager.GetCandidatesByCategory(Candidates, CandidateCategoryNo.I, CandidateSNo.I);
//now that the method is done, you can use the Candidates collection to get the results
var v = Candidates.FirstOrDefault(); //will get first candidate, or null if collection is empty
string cand1name = v.Name;
RBcand1.Content = cand1name;
}
}
public class CandidateManager
{
//first time CandidateManager is used, it will populate backing store
static CandidateManager()
{
//initialize data collection
Candidates = new List<Candidate>();
GetCandidateData().ForEach(p => Candidates.Add(p));
}
/// <summary>
/// Backing Store
/// </summary>
private static List<Candidate> Candidates { get; set; }
/// <summary>
/// Returns all candidates
/// </summary>
/// <returns></returns>
public static List<Candidate> GetAllCandidates()
{
return Candidates;
}
/// <summary>
/// Returns all candidates for a specified category
/// </summary>
/// <param name="candidateCategory"></param>
/// <returns></returns>
public static List<Candidate> GetCandidatesByCategory(CandidateCategoryNo candidateCategory)
{
return Candidates.Where(c => c.Category_no == candidateCategory).ToList();
}
/// <summary>
/// Returns specific candidate based on unique category/sno combination.
/// Returns null if no match
/// </summary>
/// <param name="candidateCategory"></param>
/// <param name="Sno"></param>
/// <returns></returns>
public static Candidate GetCandidateByCategoryAndSno(CandidateCategoryNo candidateCategory, CandidateSNo Sno)
{
return Candidates.Where(c => c.S_no == Sno && c.Category_no == candidateCategory).FirstOrDefault();
}
/// <summary>
/// data creation
/// </summary>
/// <returns></returns>
private static List<Candidate> GetCandidateData()
{
var _candidate = new List<Candidate>();
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.I, VoteCount = 0, Category = "Science and IT Club", Name = "A" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.I, VoteCount = 0, Category = "Science and IT Club", Name = "B" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.I, VoteCount = 0, Category = "Science and IT Club", Name = "C" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.II, VoteCount = 0, Category = "Dance Club", Name = "D" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.II, VoteCount = 0, Category = "Dance Club", Name = "E" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.II, VoteCount = 0, Category = "Dance Club", Name = "F" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.III, VoteCount = 0, Category = "Music Club", Name = "G" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.III, VoteCount = 0, Category = "Music Club", Name = "H" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.III, VoteCount = 0, Category = "Music Club", Name = "I" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.IV, VoteCount = 0, Category = "Social Service Club", Name = "J" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.IV, VoteCount = 0, Category = "Social Service Club", Name = "K" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.IV, VoteCount = 0, Category = "Social Service Club", Name = "L" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.V, VoteCount = 0, Category = "Sports Club", Name = "M" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.V, VoteCount = 0, Category = "Sports Club", Name = "N" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.V, VoteCount = 0, Category = "Sports Club", Name = "O" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.I, Category_no = CandidateCategoryNo.VI, VoteCount = 0, Category = "School Captain", Name = "P" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.II, Category_no = CandidateCategoryNo.VI, VoteCount = 0, Category = "School Captain", Name = "Q" });
_candidate.Add(new Candidate() { S_no = CandidateSNo.III, Category_no = CandidateCategoryNo.VI, VoteCount = 0, Category = "School Captain", Name = "R" });
return _candidate;
}
}
public MainPage()
{
this.InitializeComponent();
var c = CandidateManager.GetCandidateByCategoryAndSno(CandidateCategoryNo.II, CandidateSNo.II);
RBcand1.Content = c?.Name;
}