C# 如何通过使用其他属性筛选可观察集合来检索类的属性?

C# 如何通过使用其他属性筛选可观察集合来检索类的属性?,c#,class,uwp,C#,Class,Uwp,我正在VS2015社区上开发一个UWP应用程序,我做了一个班级候选人和另一个班级候选人经理。在CandidateManager类中,我创建了一个方法getCandidateByCategory,以按类别号和序列号对候选对象进行排序。我在ScienceAndITClub.Xaml.cs页面上调用了该方法,但现在检索筛选项的name属性时遇到问题(要将其设置为RBcand1 radiobutton的内容),“.”下有一条红线,显示错误“运算符”。“不能应用于“void”类型的操作数。”。而且,总是只

我正在VS2015社区上开发一个UWP应用程序,我做了一个班级候选人和另一个班级候选人经理。在CandidateManager类中,我创建了一个方法getCandidateByCategory,以按类别号和序列号对候选对象进行排序。我在ScienceAndITClub.Xaml.cs页面上调用了该方法,但现在检索筛选项的name属性时遇到问题(要将其设置为RBcand1 radiobutton的内容),“.”下有一条红线,显示错误“运算符”。“不能应用于“void”类型的操作数。”。而且,总是只有一个候选人有一组特定的类别号和序列号

这里是Science&ITClub.Xaml.cs:

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;
}