我想覆盖int的ToString()
方法(这是类的一部分),这样如果int的值为0,ToString()
应该返回一个空字符串{ {1}}。可以这样做吗?
更新 创建一个
会很容易""
我只是想知道它是否可以在一个原始类型上实现(ToString())
答案 0 :(得分:11)
三种主要方法:
所以你可以使用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();
}
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()
的实现。
一些选项:
int
创建扩展方法,但是,您必须管理调用它(而不是自己ToString
)。ToString
你想要的方式,并在你的类中使用它。ToString
。答案 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变量的正常值。
有关如何在现有类上创建扩展方法的参考,您可以参考下面的链接:
答案 10 :(得分:0)
为Int创建Extension
public static class Ext
{
public static string ToMyString(this int myInt)
{
return myInt == 0 ? "" : myInt.ToString();
}
}