0

我正在学习 NerdDinner 教程。我的代码中出现错误。我想我搞砸了内部班级和括号的数量。但我真的不知道如何弄清楚。任何人都可以帮助我吗?谢谢。下面是我的代码:

namespace NerdDinner.Models
{
    public partial class DinnerViolation
    {
        public bool isValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            yield break;
        }

        public void OnValidate(ChangeAction action)
        {
            if (!isValid)
                throw new ApplicationException("Rule violations prevent saving");
        }
    }

        public class RuleViolation
        {
            public string ErrorMessage { get; private set; }
            public string PropertyName { get; private set; }

            public RuleViolation(string errormessage, string propertyName)
            {
                ErrorMessage = errormessage;
                PropertyName = propertyName;
            }
        }

            public IEnumerable<RuleViolation> GetRuleViolations()//Error appears here
            {

                if (String.IsNullOrEmpty(Title))
                    yield return new RuleViolation("Title required", "Title");

                if (String.IsNullOrEmpty(Description))
                    yield return new RuleViolation("Description required", "Description");

                if (String.IsNullOrEmpty(HostedBy))
                    yield return new RuleViolation("HostedBy", "HostedBy");

                if (String.IsNullOrEmpty(Address))
                    yield return new RuleViolation("Address required", "Address");

                if (String.IsNullOrEmpty(Country))
                    yield return new RuleViolation("Country required", "Country");

                if (String.IsNullOrEmpty(ContactPhone))
                    yield return new RuleViolation("ContactPhone required", "ContactPhone");

                if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
                    yield return new RuleViolation("Phone# does not match country", "ContactPhone");

                yield break;
            }

        public class PhoneValidator
        {
            static IDictionary<string, Regex> countryRegex = new Dictionary<string, Regex>() {           
            { "USA", new Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$")},            
            { "UK", new Regex("(^1300\\d{6}$)|(^1800|1900|1902\\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\\d{4}$)|(^04\\d{2,3}\\d{6}$)")},            
            { "Netherlands", new Regex("(^\\+[0-9]{2}|^\\+[0-9]{2}\\(0\\)|^\\(\\+[0-9]{2}\\)\\(0\\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\\-\\s]{10}$)")},    
            };

            public static bool IsValidNumber(string phoneNumber, string country)
            {
                if (country != null && countryRegex.ContainsKey(country))
                    return countryRegex[country].IsMatch(phoneNumber);
                else
                    return false;
            }

            public static IEnumerable<string> Countries
            {
                get
                {
                    return countryRegex.Keys;
                }
            }

        }
 }
4

1 回答 1

3

这个声明是问题:

public IEnumerable<RuleViolation> GetRuleViolations()

该方法在类中不存在。你以为它在哪个班?无论您希望它进入哪个班级,都将其移到那里。

需要注意的几点:

  • 如果您要求 Visual Studio 缩进您的代码,您将更好地了解正在发生的事情。例如,您已经缩进RuleViolation了比DinnerViolation没有特定原因的更多。
  • 除非您确实有充分的理由,否则我不会使用嵌套类。顶级类更容易推理。
  • 如果您为每个源文件保留一个类,则很难对范围和位置感到困惑。
于 2013-06-05T17:14:30.617 回答