【问题标题】:how can I create ToInt32 method in System namespace?如何在 System 命名空间中创建 ToInt32 方法?
【发布时间】:2018-09-18 17:38:54
【问题描述】:

如您所知,我们可以使用 Convert.ToString 或 ToString 转换为字符串。我想为整数、字节等做同样的事情。此外,当我放点时,我想为每个对象看到这个方法。 方法应该怎么写?

【问题讨论】:

  • I like pie的转换整数值是多少?
  • 题外话,因为好吧...您只是在描述您想要的东西而没有任何明显的尝试,但是无论如何,如果您真的想要它...为Object编写扩展方法,例如@ 987654322@。当然不要忘记首先检查对象本身是否提供了一些转换(IConvertible,可能是自定义运算符,可能是TypeConverter?)。为什么不直接使用Convert.ChangeType()?以我的拙见,您只会用几乎无用的方法污染每种类型。
  • 在System 命名空间中的object 上定义扩展方法是一种非常糟糕的形式。至少使用不同的命名空间,这样你就不会强迫每个人都用你的方法弄乱他们的智能感知。
  • 看看int.Parse,或者更好的是int.TryParse。后者处理像@Plutonix 的“我喜欢馅饼”这样的字符串而不抛出异常

标签: c# type-conversion int


【解决方案1】:

您正在寻找一种扩展方法。只需在其中创建一个静态类和一个静态方法:

public static class Exts
{
     public static int ToInt32(this string x)
     {
          int result = 0;
          int.TryParse(x, out result);
          return result;
     }
}

当然,我的方法是一个示例,它只为不能转换为 int 的任何字符串值返回 0,但是您可以编写任何代码,接受默认值作为参数,抛出异常,...

然后你可以像这样使用它:

string a = "123";
int b = a.ToInt32();
int c = "321".ToInt32();

【讨论】:

  • 你就是这样做的。但是,不要这样做。如果你这样做了,你会后悔的。
  • @Flydog57 不做什么?
  • 为什么要投反对票?请评论问题,不要只是投反对票
  • 这不是我的反对意见。不要在string 上创建ToInt32 扩展方法。它会隐藏太多的信息。使用int.TryParse(与允许内联输出变量声明的最新版本的 C# 一起使用更容易)并明确显示您想要对解析失败执行什么操作。如果您将其添加到您的代码中,从长远来看,您会后悔的。你不必相信我,但是....
  • 他想对所有类型都有这个扩展,字符串就是其中之一,我实际上使用过tryparse
【解决方案2】:

编写一个通用扩展,将任何类型转换为Int32:

public static class ObjectExt {
    public static int ToInt<T>(this T obj) => Convert.ToInt32(obj);
}

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2012-02-22
    • 2021-12-18
    相关资源
    最近更新 更多