重载ToString()用于类中的int元素

本文关键字:int 元素 用于 ToString 重载 | 更新日期: 2023-09-27 18:13:57

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

创建一个

很简单
public string AmountToString {
    get { if (Amount != 0) return Amount.ToString(); else return ""; }
}

我只是想看看它是否可以在原始类型

重载ToString()用于类中的int元素

上实现(ToString())

三种主要方法:

使用(自定义)格式提供者

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

编辑我想我找到了一个自定义格式字符串,它与默认的。net数字格式提供程序一起工作:

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

另一个例子摘自";"部分分隔符:

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

提示:

您可以下载Format Utility,该应用程序使您能够将格式字符串应用于数字或日期和时间值,并显示结果字符串。

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

访问器辅助:

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

很遗憾没有。您需要访问类代码来覆盖任何方法或属性,包括ToString方法。因为int是一个基本类型,你不能改变类的代码(不容易也不可靠)。

你最好的选择是创建一个扩展方法:
public static class IntExtensions
{
    public static ToStringOrEmpty(this int value)
    {
        return value == 0 ? "" : value.ToString();
    }
}

您可以在相同的命名空间中定义扩展方法并覆盖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();
    }
}

除非它是那个类的方法,否则你不能改变int的ToString()实现。

一些选择:

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

您必须重写(您的)类本身的ToString方法,当它被调用时,只需返回string。

该字段为0时为空。
return a+i==0?string.Empty:i+...

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

我认为,最好编写一些扩展方法来代替…

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

我以前从未听说过这样做的方法,在搜索时也没有找到。您可以使用一个自定义类来保存一个int类型,并拥有自己的覆盖toString()。这有关系吗?还是必须是整型?

也可以用

x == 0 ? "" : x.toString();
这样你就得到"如果是0或者tostring

你不能重写int的ToString()方法,因为你不能访问代码,但你可以在int类上创建一个扩展方法,使用不同的方法名,如ToString2(),当int的值为零时,你可以返回空字符串,否则你可以返回int变量的正常值。

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

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

为Int创建Extension

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

您要做的是重写您想要实现其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 };
    }
}