C# getter和setter,获取多个字段

C# getter和setter,获取多个字段,c#,windows-phone-7,getter-setter,C#,Windows Phone 7,Getter Setter,我遇到了一个问题,当我尝试将字符串组合在一起,并拥有一个包含所有值的长字符串时,当我解析XML时,我只得到第一组值 基本上我明白了 Team1得分1:Score2 Team2 相对于 Team1:Score2 Team2 Team3:Score4 Team4 Team5:Score6 Team6 我正在将我的控件绑定到组合团队 你们能帮帮我吗?我只想存储以前的字符串,然后将新字符串与旧字符串组合,我看不出这很难,但这让我感到困惑,阅读它让我更加困惑 谢谢 John您的代码将新值连接到一个空字符串

我遇到了一个问题,当我尝试将字符串组合在一起,并拥有一个包含所有值的长字符串时,当我解析XML时,我只得到第一组值

基本上我明白了

Team1得分1:Score2 Team2

相对于
Team1:Score2 Team2 Team3:Score4 Team4 Team5:Score6 Team6

我正在将我的控件绑定到
组合团队

你们能帮帮我吗?我只想存储以前的字符串,然后将新字符串与旧字符串组合,我看不出这很难,但这让我感到困惑,阅读它让我更加困惑

谢谢


John

您的代码将新值连接到一个空字符串(
last=”“
)。

您可能希望连接到上一个值。

您的代码将新值连接到一个空字符串(
last=”“
)。

您可能希望连接到上一个值。

我不确定您期望的是什么,
last
总是初始化为“”,因此+=是不相关的

看起来这个叫做团队的课程真的是一个游戏吗

我不认为反复设置HomeTeam、AwayTeam、HomeScore和AwayScore(然后以某种方式在内部保存)是跟踪多场比赛的好方法

你为什么不考虑使用一系列游戏呢

试着这样做:

在GamesLib库中:

public class Teams : INotifyPropertyChanged
    {
        public string CombinedTeams
        {
            get
            {                   
                return Combined;
            }

            set
            {                    
                {                                               
                    CombinedTeams += value;
                    NotifiyPropertyChanged("Combined"); 
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifiyPropertyChanged(string p)
        {
            if (null != p)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(p));
            }
        }
        private string Combined
        {

            get
            {
                return " " + HomeTeam + " " + HomeScore + " - " + AwayScore + " " + AwayTeam;
            }
            set 
            {
                { 
                    Combined += value;
                }
            }
        }
        public string HomeTeam { get; set; }
        public string AwayTeam { get; set; }
        public string HomeScore { get; set; }
        public string AwayScore { get; set; }
    }

我不确定您期望的是什么,
last
总是初始化为“”,因此+=是不相关的

看起来这个叫做团队的课程真的是一个游戏吗

我不认为反复设置HomeTeam、AwayTeam、HomeScore和AwayScore(然后以某种方式在内部保存)是跟踪多场比赛的好方法

你为什么不考虑使用一系列游戏呢

试着这样做:

在GamesLib库中:

public class Teams : INotifyPropertyChanged
    {
        public string CombinedTeams
        {
            get
            {                   
                return Combined;
            }

            set
            {                    
                {                                               
                    CombinedTeams += value;
                    NotifiyPropertyChanged("Combined"); 
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifiyPropertyChanged(string p)
        {
            if (null != p)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(p));
            }
        }
        private string Combined
        {

            get
            {
                return " " + HomeTeam + " " + HomeScore + " - " + AwayScore + " " + AwayTeam;
            }
            set 
            {
                { 
                    Combined += value;
                }
            }
        }
        public string HomeTeam { get; set; }
        public string AwayTeam { get; set; }
        public string HomeScore { get; set; }
        public string AwayScore { get; set; }
    }

得到错误结果的原因是一个属性引用了另一个属性,而第二个属性总是返回特定值

当从其他地方调用此代码块时,将返回您在下面定义的另一个名为“Combined”的变量的结果

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GamesLib;

namespace TestHarness
{
    class Program
    {
        static void Main(string[] args)
        {
            var gs = new GamesLib.Games();
            gs.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(gs_PropertyChanged);
            var g = new Game("hometeam", "awayteam", "1", "0");
            gs.Add(g);
            g = new Game("lions", "bears", "1", "0");
            gs.Add(g);
            Console.WriteLine("Final result:" + gs.CombinedTeams);
        }

        static void gs_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            var gs = sender as Games;
            Console.WriteLine("Changed: " + gs.CombinedTeams);
        }
    }
}
其他一切都是学术性的,因为你是getter,基本上总是返回“+HomeTeam+”+HomeScore+“-“+AwayScore+”+AwayTeam

我怀疑您会希望将代码重组为类似这样的内容

public string CombinedTeams                      
{                      
    get                      
    {                                         
        return Combined;                      
    }                      
    ...
}           

private string Combined                        
{                        
    get                        
    {                        
        return " " + HomeTeam + " " + HomeScore + " - " + AwayScore + " " + AwayTeam;                        
    }
    ...
}
当然有更好的方法可以做到这一点,但我希望这会让你有一个开始

一般规则(一直被代码忍者打破,这很好)是属性不应该自己做任何计算,它确实允许公共访问类中的私有数据


浏览几篇关于C#Properties的文章可能是值得的。这里有一些建议可以帮助您开始:当然,还有一些建议您得到错误结果的原因是因为一个属性引用了另一个属性,而第二个属性总是返回一个特定的值

当从其他地方调用此代码块时,将返回您在下面定义的另一个名为“Combined”的变量的结果

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GamesLib;

namespace TestHarness
{
    class Program
    {
        static void Main(string[] args)
        {
            var gs = new GamesLib.Games();
            gs.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(gs_PropertyChanged);
            var g = new Game("hometeam", "awayteam", "1", "0");
            gs.Add(g);
            g = new Game("lions", "bears", "1", "0");
            gs.Add(g);
            Console.WriteLine("Final result:" + gs.CombinedTeams);
        }

        static void gs_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            var gs = sender as Games;
            Console.WriteLine("Changed: " + gs.CombinedTeams);
        }
    }
}
其他一切都是学术性的,因为你是getter,基本上总是返回“+HomeTeam+”+HomeScore+“-“+AwayScore+”+AwayTeam

我怀疑您会希望将代码重组为类似这样的内容

public string CombinedTeams                      
{                      
    get                      
    {                                         
        return Combined;                      
    }                      
    ...
}           

private string Combined                        
{                        
    get                        
    {                        
        return " " + HomeTeam + " " + HomeScore + " - " + AwayScore + " " + AwayTeam;                        
    }
    ...
}
当然有更好的方法可以做到这一点,但我希望这会让你有一个开始

一般规则(一直被代码忍者打破,这很好)是属性不应该自己做任何计算,它确实允许公共访问类中的私有数据


浏览几篇关于C#Properties的文章可能是值得的。这里有一些建议可以帮助您开始:当然,还有一些建议,我应该如何存储最后一个值?我应该如何存储最后一个值?我编辑了上面的内容,但我仍在努力,我无法了解getter和setter以及inotifiedproperty另一个给使用Inotifypropertychanged的人的小提示。在设置实际值之前,不应调用此.NotifyPropertyChanged(propertyName)。您已经在通知,然后更新组合。我编辑了上面的内容,但我仍在努力,我无法理解getter和setter以及inotifiedproperty。另一个给使用Inotifypropertychanged的人的小提示。在设置实际值之前,不应调用此.NotifyPropertyChanged(propertyName)。你已经通知了,然后更新了。我更改了代码,但我仍然没有得到它,我想我只是没有看到问题,我一直在看这个愚蠢的东西2hours@JohnAntony Daniel Nolan我已经为您发布了一个完整的示例。我更改了代码,但仍然没有得到它,我想我只是没有看到问题,我看这个愚蠢的东西已经有2年了hours@JohnAntony Daniel Nolan我为您发布了一个完整的示例。我非常感谢您花时间解释和概述这一点,谢谢您,很高兴这么做,我真的很感谢你花时间来解释和概述这一点,谢谢你,很高兴这么做,很高兴它有帮助。