覆盖类中int元素的ToString()

时间:2011-11-10 11:19:48

标签: c# .net

我想覆盖int的ToString()方法(这是类的一部分),这样如果int的值为0,ToString()应该返回一个空字符串{ {1}}。可以这样做吗?

更新 创建一个

会很容易
""

我只是想知道它是否可以在一个原始类型上实现(ToString())

11 个答案:

答案 0 :(得分:11)

三种主要方法:

使用(custom) Format provider

所以你可以使用i.ToString(formatprovider);

编辑我想我找到了一个可以使用默认.NET数字格式提供程序的自定义格式字符串:

i.ToString("0;-0;"); // works

另一个示例从The ";" Section Separator上的页面抬起:

i.ToString("##;(##);**Zero**"); // would return "**Zero** instead
  

提示:

     

您可以使用ownload the Format Utility这个应用程序,它可以将格式字符串应用于数字或日期和时间值,并显示结果字符串。

扩展方法

public static string ToStringOrEmpty(this int i)
{
    return (0==i)? string.Empty : i.ToString();
}

Accessor Helper:

class X
{ 
      int member;

      public string getMember() { return (0==member)? string.Empty : member.ToString();
}

答案 1 :(得分:1)

不幸的是没有。您需要访问类代码才能覆盖任何方法或属性,包括ToString方法。由于int是一种主要类型,因此您无法更改类代码(无论如何都不会轻易改变)。

您最好的选择是创建一个扩展方法:

public static class IntExtensions
{
    public static ToStringOrEmpty(this int value)
    {
        return value == 0 ? "" : value.ToString();
    }
}

答案 2 :(得分:1)

除非它是该类的方法,否则不能更改int ToString()的实现。

一些选项:

  1. 在班级上创建一个方法。
  2. int创建扩展方法,但是,您必须管理调用它(而不是自己ToString)。
  3. 另一种选择是在int周围创建一个包装器,使用隐式转换运算符等,实现ToString你想要的方式,并在你的类中使用它。
  4. 创建或查找可以传递给ToString
  5. 的自定义格式提供程序

答案 3 :(得分:1)

您可以在同一名称空间中定义扩展方法,并覆盖int类的行为。示例示例:

void Main()
{
    Console.WriteLine(5.Convert()); // Prints "5"
    Console.WriteLine("Empty String" + 0.Convert());
}

// Define other methods and classes here
public static class ExtMethods{
    public static string Convert(this int value)
    {
        return value == 0 ? string.Empty : value.ToString();
    }
}

答案 4 :(得分:0)

你必须覆盖(你的)类本身的ToString方法,当它被调用时,只需在此字段为0时返回string.Empty。

return a+i==0?string.Empty:i+...

答案 5 :(得分:0)

如果你编写一个继承自int的类型,但是,不幸的是int是一个密封类,所以你不能。

答案 6 :(得分:0)

我认为,最好编写som扩展方法而不是......

public static string ToMyString(this int input)
{
    return input == 0 ? string.Empty : input.ToString();
}

答案 7 :(得分:0)

我从来没有听说过这样做的方法,也没有在搜索时找到。 您可以使用包含int的自定义类,并且具有自己的重写toString()。这有关系吗?或者你必须把它作为一个int?

您也可以使用

x == 0 ? "" : x.toString();

如果为0或tostring

,你会得到“”

答案 8 :(得分:0)

您想要做的是覆盖要实现其ToString()的类。类型int是一个密封类,因为大多数基类型都是。

你可以做的是创建一个封装int的类,然后实现强制转换运算符并覆盖ToString()方法。

对于这么小的东西来说,这听起来很多,但这是要走的路!

这是你的课程(抱歉糟糕的名字):

struct b
{
    int myInt;
    public override string ToString()
    {
        return myInt != 0 ? myInt.ToString() : "";
    }

    public static implicit operator int(b d)
    {
        return d.myInt;
    }
    //  User-defined conversion from double to Digit
    public static implicit operator b(int d)
    {
        return new b { myInt = d };
    }
}

答案 9 :(得分:0)

您无法覆盖int的ToString()方法,因为您无法访问代码,但您可以在int类上创建一个扩展方法,使用不同的方法名称,如ToString2(),您可以在其中返回空字符串当int的值为零时,您可以返回int变量的正常值。

有关如何在现有类上创建扩展方法的参考,您可以参考下面的链接:

http://msdn.microsoft.com/en-us/library/bb311042.aspx

答案 10 :(得分:0)

为Int创建Extension

public static class Ext
{
        public static string ToMyString(this int myInt)
        {
            return myInt == 0 ? "" : myInt.ToString();
        }
}