String.Empty、string=”” 和null的区别

String.Empty是string类的一个静态常量;

String.Empty和string=””区别不大,因为String.Empty的内部实现是:

1

2

3

4

5

6

7

8

9

10

11

12

public static readonly string Empty;

//这就是String.Empty 那是只读的String类的成员,也是string的变量的默认值是什么呢?

 

//String的构造函数

static String(){

    Empty = "";//Empty就是他""

    WhitespaceChars = new char[] {

        '\t''\n''\v''\f''\r'' ''\x0085''\x00a0'' '' '' '' '' '' '' '' ',

        ' '' '' '' ''''\u2028''\u2029'' '''

     };

 

}

  

 再看一段代码:

1

2

3

4

5

6

7

8

string s1 = "";

string s2 = string.Empty;

if (s1 == s2){// 结果都是True

    Console.WriteLine("一模一样!");

}   

Console.WriteLine("".Equals(string.Empty));// 结果都是True

Console.WriteLine(object.ReferenceEquals(string.Empty, ""));// 结果都是True

既然String.Empty和string=””一样,同样需要占用内存空间,为什么推荐优先使用String.Empty ?

string.Empty只是让代码好读,防止代码产生歧义,比如说:

string s = "";  string s = " ";   这个不细心看,很难看出是空字符串还是空格字符。

 

如果判断一个字符串是否是空串,使用

if(s==String.Empty)和if(s==””)的效率是一样的,但是最高效的写法是if(s.Length==0)

string.IsNullOrEmpty的内部实现方式:

public static bool IsNullOrEmpty(string value){

    if (value != null){

        return (value.Length == 0);

    }

    return true;

}

   

而string str=null则是表示str未指向任何对象。

 

转载自:https://www.cnblogs.com/fanyong/archive/2012/11/01/2750163.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对这段代码的一些优化建议: 1. 使用异步方法来获取数据,可以提高性能。例如,可以使用 `ToListAsync()` 替代 `ToList()`。 2. 使用 LINQ 的 Select 方法来进行对象的转换,可以让代码更简洁易读。例如,可以使用如下的代码替代 `ProgramModelEntities.Select()`: ``` Programmes = await _migrateRepository.GetAllWithNoTrackingAsync<ProgramModelEntity>() .Select(program => new CProgramme { Id = new Guid(program.Id), Name = program.Name, SchoolId = SQIConstants.SYS_School_ID, Description = program.Description, CreatedById = String.IsNullOrEmpty(program.CreatedBy) ? new Guid("e306ca07-a21b-40fd-935a-343cfe369001") : new Guid(program.CreatedBy), CreatedTime = program.CreatedOn?.Ticks ?? new DateTime().Ticks, ModifiedById = String.IsNullOrEmpty(program.ModifiedBy) ? new Guid("e306ca07-a21b-40fd-935a-343cfe369001") : new Guid(program.ModifiedBy), ModifiedTime = program.ModifiedOn?.Ticks ?? new DateTime().Ticks, Duration = 1 }) .ToListAsync(); ``` 3. 对于资源列表和资源访问列表的操作,可以使用 LINQ 的 SelectMany 方法和 Where 方法来替代 foreach 循环。例如,可以使用如下的代码替代 `if (!String.IsNullOrEmpty(program.ProgramAdmins))` 和 `ResourcesList.Add()`: ``` var programmeAdmins = program.ProgramAdmins?.Split(';'); if (programmeAdmins?.Any() == true) { ResourceAccesses.AddRange(programmeAdmins .Select(admin => new CResourceAccess { Id = Guid.NewGuid(), UserId = new Guid(admin), RoleType = RoleType.ProgrammeAdmin, ResourceId = new Guid(program.Id), ResourceLevel = ResourceLevel.Programme })); } ResourcesList.AddRange(programmeAdmins?.Select(admin => new CResources { Id = new Guid(program.Id), ResourceLevel = ResourceLevel.Programme, SchoolId = SQIConstants.SYS_School_ID, ProgrammeId = new Guid(program.Id), }) ?? Enumerable.Empty<CResources>()); ``` 综上所述,以下是经过优化后的代码: ``` Programmes = await _migrateRepository.GetAllWithNoTrackingAsync<ProgramModelEntity>() .Select(program => new CProgramme { Id = new Guid(program.Id), Name = program.Name, SchoolId = SQIConstants.SYS_School_ID, Description = program.Description, CreatedById = String.IsNullOrEmpty(program.CreatedBy) ? new Guid("e306ca07-a21b-40fd-935a-343cfe369001") : new Guid(program.CreatedBy), CreatedTime = program.CreatedOn?.Ticks ?? new DateTime().Ticks, ModifiedById = String.IsNullOrEmpty(program.ModifiedBy) ? new Guid("e306ca07-a21b-40fd-935a-343cfe369001") : new Guid(program.ModifiedBy), ModifiedTime = program.ModifiedOn?.Ticks ?? new DateTime().Ticks, Duration = 1 }) .ToListAsync(); var programmeResources = Programmes.SelectMany(programme => new[] { new CResources { Id = programme.Id, ResourceLevel = ResourceLevel.Programme, SchoolId = SQIConstants.SYS_School_ID, ProgrammeId = programme.Id } }); var programmeAdminResources = Programmes.SelectMany(programme => { var programmeAdmins = programme.ProgramAdmins?.Split(';'); return programmeAdmins?.Select(admin => new CResourceAccess { Id = Guid.NewGuid(), UserId = new Guid(admin), RoleType = RoleType.ProgrammeAdmin, ResourceId = programme.Id, ResourceLevel = ResourceLevel.Programme }) ?? Enumerable.Empty<CResourceAccess>(); }); ResourcesList.AddRange(programmeResources); ResourceAccesses.AddRange(programmeAdminResources); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值