C#中属性的一个容易搞错的问题

猜猜看以下程序的输出是什么?

using System;

using System.Windows.Forms;

namespace Skyiv.Ben.Test

{

    sealed class MainTest

    {

        static void Main()

        {

            Label lblOut = new Label();

            lblOut.Text = null;

            Console.WriteLine("{0} {1}", lblOut.Text == null, lblOut.Text == "");

        }

    }

}

该程序的输出是: False True,而不是: True False。也就是说,你将一个null赋值给lblOut.Text,而lblOut.Text的值是""(即string.Empty),而不是null。lblOut.Text是一个属性,实际上,按C#语法,给属性赋值是调用它的set方法,而获取属性的值是调用它的get方法,这两者不必一致,也就是说,你给属性赋一个值,然后再读该属性的值,取到的值就有可能不是你刚刚赋给它的值了。编程时如不小心,就有可能出现BUG。我以前写程序时就出现过这样的错误:

lblOut.Text = GetAccount();

if (lblOut.Text == null) lblOut.Text = "无此账号";

结果这个if语句永远不会取真值。

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-11-03 09:34:30

C#中属性的一个容易搞错的问题的相关文章

(一)数组或对象中最会一个属性是否该加逗号的测试

1.结论:在IE8中有兼容问题.会将逗号后面的空也算作一个属性,所以最后一个属性末不要加逗号 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> <script src="lib

mvc中动态给一个Model类的属性设置验证

原文:mvc中动态给一个Model类的属性设置验证 在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这样的验证毕竟功能有限,那么就需要我们自己进行定制验证. 假设有Model类:class Dinners{ private string Title; private System.DateTime EventDate; private string Description; private stri

iOS动态的判断一个对象中是否包含一个属性

<span style="font-family:Arial, Helvetica, sans-serif;">有时候我们可能会需要判断一个对象是否有这个属性,那么我们可以用下面这个方法</span> <span style="font-family: Arial, Helvetica, sans-serif;"> </span> <span style="font-family: Arial, Hel

js中window对象的opener属性的一个坑

2018-05-08 17:48:33 今天我编写js代码时碰到了一个让我纠结了很久的小问题,在此记录一下当做笔记, 这个问题就是:在我自己写的子窗口中用opener属性却获取不到父窗口的window对象. 现在已经解决这个问题,请看下文 这是父窗口(windows.html)的代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/lo

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Android中如何搭建一个WebServer

对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate 的继承映射可以理解持久化类之间的继承关系.例如:人和学生之间的关系.学生继承了人,可以认为学生是一个特殊的人,如果对人进行查询,学生的实例也将被得到. Hibernate支持三种继承映射策略: 使用 subclass 进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态. 使用 joined-subclass 进行映射: 对于继承关系中的子类使用同一个表

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

CSS:在input、pre中左边加上一个图标(一行和多行)

前言 接触过EasyUI的朋友都知道其警告框就是左边有个三角警告图标,此文所做的效果正是这样.此外,还将示例多行的做法. 一.在input左边加上一个图标(一行) 注:left center定义了图标的位置:transparent定义了背景颜色为透明( background-color的默认值) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

javascript如何遍历数组中的每一个元素

javascript如何遍历数组中的每一个元素:遍历数组中的所有元素是一个非常基础简单的操作,可能初学者还不够了解,下面就通过代码实例介绍一下如何实现此功能.代码如下: var theArray=["蚂蚁部落","青岛市南区","新锐科技",3]; for(var index=0;index<theArray.length;index++) { console.log(theArray[index]); } 以上代码可以遍历数组中的每一个元