c#中的数据类型

时间:2010-11-17 04:48:50

标签: c# types

我需要一个整数数据类型,从1到10开始为00,从10到99开始为0。

c#

中是否有任何数据类型

非常感谢....

6 个答案:

答案 0 :(得分:7)

您可以使用几乎任何整数类型(intuint等);重要的是你如何格式它。在这种情况下:

string s = i.ToString("000");

整数数据类型只是值 - 前导零不存在或不存在 - 这不是整数的作用。

您当然可以创建自定义struct,在构造函数中使用整数值(可能是自定义转换运算符),覆盖ToString()方法(可能还有EqualsGetHashCode等。)


只是为了踢:

public struct TriDigit : IComparable, IComparable<TriDigit>, IComparable<int>, IEquatable<TriDigit>, IEquatable<int>
{
    private readonly int value;
    public TriDigit(int value)
    {
        if (value < 0 || value > 999) throw new ArgumentOutOfRangeException("value");
        this.value = value;
    }
    public override string ToString()
    {
        return value.ToString("000");
    }
    public override bool Equals(object obj)
    {
        if (obj == null) return false;
        if (obj is TriDigit) return ((TriDigit)obj).value == value;
        if (obj is int) return ((int)obj) == value;
        return false;
    }
    public int CompareTo(object obj)
    {
        if (obj == null) return -1;
        if(obj is TriDigit) return value.CompareTo(((TriDigit)obj).value);
        if (obj is int) return value.CompareTo((int)obj);
        return -1;
    }
    public override int GetHashCode()
    {
        return value;
    }
    public static explicit operator TriDigit(int value)
    {
        return new TriDigit(value);
    }
    public static implicit operator int(TriDigit value)
    {
        return value.value;
    }

    int IComparable<TriDigit>.CompareTo(TriDigit other)
    {
        return value.CompareTo(other.value);
    }
    int IComparable<int>.CompareTo(int other)
    {
        return value.CompareTo(other);
    }
    bool IEquatable<TriDigit>.Equals(TriDigit other)
    {
        return value == other.value;
    }
    bool IEquatable<int>.Equals(int other)
    {
        return value == other;
    }
}

答案 1 :(得分:2)

听起来你想要一个格式字符串,而不是数据类型。

Console.WriteLine("{0:D3}", i);

答案 2 :(得分:0)

您可以简单地使用int,或者它必须不是负uint(无符号整数)。数据类型较小,但对于大多数应用程序而言,它们并不值得担心。

答案 3 :(得分:0)

如果你说你需要一个合法范围从1到10的整数,索引从零开始,那么答案是否定的。你需要自己做一个ADT。

答案 4 :(得分:0)

它是您想要的格式,而不是新的数据类型。在此处阅读所有相关内容:MSDN's page on Custom Numeric Format Strings

答案 5 :(得分:0)

您可以使用PadLeft(int totalWidth,char paddingChar)之类的..

int myNumber=12
string myStringNumber = myNumber.ToString().PadLeft(3, '0');