gpt4 book ai didi

C# 扩展方法 - 有多远?

转载 作者:可可西里 更新时间:2023-11-01 07:45:06 26 4
gpt4 key购买 nike

Rails 为 Ruby 引入了一些核心扩展,例如 3.days.from_now,它会返回,正如您所期望的三天后的日期。使用 C# 中的扩展方法,我们现在可以做类似的事情:

static class Extensions
{
public static TimeSpan Days(this int i)
{
return new TimeSpan(i, 0, 0, 0, 0);
}

public static DateTime FromNow(this TimeSpan ts)
{
return DateTime.Now.Add(ts);
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine(
3.Days().FromNow()
);
}
}

或者怎么样:

static class Extensions
{
public static IEnumerable<int> To(this int from, int to)
{
return Enumerable.Range(from, to - from + 1);
}
}

class Program
{
static void Main(string[] args)
{
foreach (var i in 10.To(20))
{
Console.WriteLine(i);
}
}
}

这从根本上来说是错误的,还是有时候它是个好主意,比如在 Rails 这样的框架中?

最佳答案

我非常喜欢扩展方法,但我确实觉得当它们在 LINQ 之外使用时,它们以牺牲可维护性为代价提高了可读性。

3.Days().FromNow()为例。这非常有表现力,任何人都可以阅读这段代码并准确地告诉你它做了什么。那真是一件很美好的事情。作为编码人员,我们很高兴编写能够 self 描述和表达的代码,这样它几乎不需要注释并且阅读起来很愉快。此代码在这方面至关重要。

但是,作为编码者,我们也对后代负责,我们的后人将花费大部分时间试图理解这段代码是如何工作的。我们必须小心,不要过于表达以至于调试我们的代码需要在无数的扩展方法中跳来跳去。

扩展方法掩盖了“如何”以更好地表达“什么”。我想这使它们成为一把双刃剑,最好(像所有事物一样)适度使用。

关于C# 扩展方法 - 有多远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/371272/

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