gpt4 book ai didi

c# - 为什么 myString.IsNullOrEmpty() 没有内置到 .Net 中?

转载 作者:IT王子 更新时间:2023-10-29 04:40:28 24 4
gpt4 key购买 nike

有点学术性的问题,但我想更深入地理解框架设计。

所以我们有 String.IsNullOrEmpty(MyString)

而且我们可以编写一个扩展方法来启用myString.IsNullOrEmpty(),尽管这可以说不是最好的主意。请参阅:Is extending String class with IsNullOrEmpty confusing? .

所以我的问题是,为什么 MS 不将此功能编写为 .Net 框架的一部分?有一些性能考虑吗?更一般地说,为什么任何方法或属性被视为有值(value)的足以构建为可通过 String 对象访问的方法或属性不能作为任何字符串类型对象的成员使用?

最佳答案

静态方法 String.IsNullOrEmpty 是在 .NET Framework 2.0 版中引入的。 .NET Framework 3.5 版中引入了扩展方法以及 LINQ。所以微软在引入IsNullOrEmpty的时候并没有这个选项。

当然,IsNullOrEmpty 不能是 String 的实例方法,因为您不能在 null 的引用上调用方法。但是,您可以在此类引用上调用扩展方法,因为扩展方法语法只是静态方法调用的语法糖。


让我们假设 IsNullOrEmpty 是一个扩展方法。然后你可以这样调用它:

string s = null;
bool result = s.IsNullOrEmpty();

在评论中,有人假装此调用会抛出 NullReferenceException。扩展方法将像这样声明:

public static class StringExtensions
{
public static bool IsNullOrEmpty(this string s)
{
return s == null || s.Length == 0;
}
}

...并像这样使用...

 string s = null;
bool result = s.IsNullOrEmpty();

... 这只是...的语法糖

 string s = null;
bool result = StringExtensions.IsNullOrEmpty(s);

... 因此,不会抛出异常。这样做是否是个好主意是另一个问题(参见 answer provided by usr below)。

关于c# - 为什么 myString.IsNullOrEmpty() 没有内置到 .Net 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14196593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com