在引用之前如何确保类是有效的?

2024-03-21

    public class Person
    {
        public string FullName { get; set; }
        public int? PhoneNumber { get; set; }
        public int? CarQTY { get; set; }
    }

如果有人没有完全填充对象,我想抛出异常。例如,如果 fullName、phoneNumber 或 carQTY 为 null,我想在 get 方法上引发异常。

我真的必须这样做吗?

    public class Person
    {
        string _FullName;
        int? _PhoneNumber;
        int? _CarQTY;

        private Boolean IsValid()
        {
            Boolean condition = true;
            condition = (FullName != null) && (PhoneNumber != null) && (CarQTY != null);
            return condition;
        }
        public string FullName
        {
            get
            {
                if (!IsValid()) throw new System.ArgumentException("Parameter cannot be null", "fullName is null");
                return _FullName;
            }
            set
            {
                _FullName = value;
            }
        }
        public int? PhoneNumber
        {
            get
            {
                if (!IsValid()) throw new System.ArgumentException("Parameter cannot be null", "phoneNumber is null");
                return _PhoneNumber;
            }
            set
            {
                _PhoneNumber = value;
            }
        }
        public int? CarQTY
        {
            get
            {
                if (!IsValid()) throw new System.ArgumentException("Parameter cannot be null", "carQTY is null");
                return _CarQTY;
            }
            set
            {
                _CarQTY = value;
            }
        }
    }

正如评论中所建议的,强制通过构造函数创建对象是最有效的方法:

    public class Person
    {
        public string FullName { get; private set; }
        public int PhoneNumber { get; private set; }
        public int CarQTY { get; private set; }

        public Person(string fullName, int phone, int carQty){
            FullName = fullName;
            PhoneNumber = phone;
            CarQTY = carQty;
        }
    }

如果您希望允许在创建对象后对其进行修改,那么 setter 也可以是公共的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在引用之前如何确保类是有效的? 的相关文章

随机推荐

  • 为什么 DOCUMENT_ROOT 与远程服务器上的 realpath('.') 不同

    with echo realpath br echo dirname FILE br echo realpath dirname FILE br echo SERVER PHP SELF br echo getcwd 我总是得到 servi
  • 如何检查 CLI 程序是否正在等待来自 stdin 的输入?

    如何检查我刚刚使用 CreateProcess 启动的 CLI 程序是否正在等待来自 Windows C API 的标准输入的输入 正如上面的一些评论所说 一旦程序已经开始等待 您就无法检查程序是否正在等待标准输入 您可以使用事件处理程序
  • 2 个文档在 MongoDB 中合并

    我需要从 MongoDB 中不同集合的两个文档中获取数据 其中有 1 个公共字段 对数据库没有更改 我是新手 请帮助我 a db users find username email protected cdn cgi l email pro
  • 使用 JQuery 从另一个网站获取 HTML:可能吗?合法的?

    我正在尝试从不在同一域中的网页获取 HTML 代码 html 文本被解析并总结了在 HTML 代码来源的页面上找到的食谱 食谱名称 主要成分 步骤数 然后 用户可以单击该链接并转到域外的该网页来查看菜谱 我知道同源策略 但这是否适用于从国内
  • 使用 Chrome 打开正文中包含 HTML 的 Outlook

    虽然我已经从 Stack 中找到了很多这方面的信息 特别是here https stackoverflow com questions 5620324 mailto with html body 我只是想绝对确定在 Chrome 中无法执行
  • 嵌套哈希中的 Form_tag 参数

    我有一个没有与之关联的模型的表单 所以我正在使用form tag而不是form for 正如预期的那样 当用户提交表单时 每个字段都包含在 params 哈希中 但表单会发生很大变化 我希望在 params 哈希中包含一个哈希 该哈希将保存
  • .Net 3.5 中 Dynamic 关键字的使用

    我使用 net v4 5 在 Visual Studio 2013 中编写了这段代码 我遇到的问题是 我现在必须降级到 net v3 5 而动态关键字会抛出错误 因为缺少程序集引用 net v3 5 中是否有与 动态 等效的类型 或者有什么
  • Python Curses 不清除屏幕

    我想在Python下使用Curses而不清除屏幕 原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出 退出时将弹出菜单中丑陋的部分保留在屏幕上是可以接受的 但不是首选 我们的想法是将其用于快速实用的系统管理应用程序和脚本 其
  • 我的拉取请求已合并,下一步该做什么?

    我最近参与了 GitHub 的一个项目 我做了以下事情 分叉原始存储库 将其克隆到我的本地计算机 创建一个分支来修复现有错误 修复该分支中的错误 将该分支推送到我的存储库 向存储库的作者发送拉取请求以合并我的fix分支到其主分支 这是我第一
  • 如何在C++中输出变量的二进制值

    我的 C 编程课上有一项作业 要求编写一个输出变量值的二进制值的函数 例如 如果我将 a 的值设置为字符 我应该得到 a 输出的二进制值 我的 C 教授并不是全世界最伟大的 而且我在使用他给我们的神秘示例来使我的代码正常工作时遇到了困难 现
  • 在 LINQ 中学习表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您可以推荐哪些有关 LINQ 表达式树的文章 教程 Link https learn microsof
  • 在执行另一个方法时(动态)更新标签文本

    我是一名 iOS 开发人员 目前正在开发 iPhone 应用程序 我有一个关于更新 ViewController 内容的简单问题 如果我能得到了解此问题的人的反馈或有建议的解决方案 我将不胜感激 我正在编写一种方法 不断更新标签的文本 以及
  • 如何在通过域名输入时仅显示一次页面预加载器?

    所以 我在主页上有 jQuery 页面预加载器 如下所示
  • 如何在 Android Studio (4.2) 中查看 JetpackCompose kotlin 源代码? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 When I command click进入 JetpackCompose 函数 我看到的全部如下 根据 Android Studio 4
  • Ansible 要求安装 MySQL-python,尽管它已经安装

    我正在尝试使用在 Mac OSX 上运行的 Ansible 控制器创建一个新的 MySQL 数据库 当我第一次得到msg the python mysqldb module is required错误消息 我添加了一个任务来安装MySQL
  • 无法通过java Runtime.getRuntime().exec()执行CURL命令

    我正在使用 java 执行curl 命令 curl i user OAMADMIN tenant 358922247351079 svc 358922247369079 APPID Iuj 2swilg5fhv H Content Type
  • next.js 和material-ui - 让它们工作

    我给予next js旋转了一下 我无法让最简单的设置起作用 这是我的设置 相关库 反应 16 2 0 react dom 16 2 0 下一个 4 2 2 express 4 16 2 下一个路线 1 2 0 material ui 0 2
  • sizeof() 不由预处理器执行

    if sizeof int 4 do something 在内部使用 sizeof if在里面时不工作 define它有效 为什么 define size x sizeof x sizeof x 0 works 没有什么是邪恶的 一切都可能
  • “即时”编辑大型 xml 文件

    我有一个存储在数据库 blob 中的 xml 文件 用户将通过 spring hibernate Web 应用程序下载该文件 在通过 Hibernate 作为 byte 检索它之后 但在将其发送到输出流之前 我需要编辑 XML 的某些部分
  • 在引用之前如何确保类是有效的?

    public class Person public string FullName get set public int PhoneNumber get set public int CarQTY get set 如果有人没有完全填充对象