c# - C#中Int32的扩展方法

标签 c# .net extension-methods struct

我设想能够编写流畅的代码,为代码库中的数字增添意义。假设您想要一个数字来表示以英里为单位的距离。你会有这样的东西:

用法:

var result = myMethod(100.Miles());

我认为这比简单地传入 int 更具可读性,而且您大概可以对 Miles 类型应用边界检查。

扩展方法和结构实现:

static class IntExtensions
{
  public static Miles(this int i) { get { return new Miles { Count = i }; } }
}

public struct Miles
{ 
  public int Count { get; private set; } //optionally perform bounds checking
} 

这样的想法会有用吗,还是在炎热的星期五为时已晚?

编辑:是的,没有扩展属性看起来不是那么整洁...对于匆忙的无效代码表示歉意。这只是一个想法。

最佳答案

这是一个有趣的想法,但在做这样的事情之前,我会要求有一个非常强大的用例。一方面,一旦将数字转换为“英里”,就不能再将其视为整数。您要么必须实现所有运算符,要么在对它们执行算术运算之前将英里数转换回整数。如果没有充分的理由这样做,就会有很多额外的工作。

不过,在某些情况下,这是一个不错的策略。 我想我记得听说过值(value)数百万美元的火箭或失败的东西 NASA 一次lost a $125 million space ship因为程序员将错误的度量单位传递给函数。这将帮助您避免该问题。

在相关说明中,您可能对 F# 感兴趣,它有 built-in support for units of measure .

关于c# - C#中Int32的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119289/

相关文章:

c# - 工作流事件 - 使用 'Assign' 事件将工作流事件名称保存到变量

c# - AES key 管理建议

.net - Powershell-将COM对象类型转换为字符串

.net - Silverlight是否支持远程处理?

c# - 扩展 System.Object 时如何避免装箱/拆箱?

data-binding - 您如何在 Web 表单数据绑定(bind)表达式中使用扩展方法?

c# - 如何将启动时窗口的位置定位到用户屏幕的右侧?

C# 如何通过社会安全号码查找某人出生的州

c# - 是否可以使用并行端口对 LCD 20X2 显示器进行编程?

c# - 你用过私有(private)扩展方法吗?