C#ChangeType和ToString?

时间:2009-08-05 19:06:07

标签: c# string casting

我想将int转换为特定类型,然后返回一个字符串,其格式取决于我将其转换为的类型。
我有一个返回Type对象的属性,另一个我想返回一个格式取决于Type的字符串。
为什么编译器不喜欢下面HexString中的代码呢? 还有另一种同样简短的方法吗?

public class TestClass
{
    private int value;
    public bool signed;
    public int nBytes;

    public int Value { get {return value;} set {this.value = value;}}

    public Type Type { 
        get { 
            switch (this.nBytes) {
            case 1:
                return (this.signed ? typeof(SByte) : typeof(Byte));
            case 2:
                return (this.signed ? typeof(Int16) : typeof(UInt16));
            default:
                return null;
            }
        }
    }

    public String HexString {
        get {
            //?? compiler error: "no overload for method 'ToString' takes '1' arguments
             return (Convert.ChangeType(this.Value, this.Type)).ToString("X" + this.nBytes);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

尝试通过String.Format格式化字符串,而不是使用Object.ToString()

return String.Format("{0:x" + this.nBytes.ToString() + "}", 
    (Convert.ChangeType(this.Value, this.Type)));

任何实现格式化ToString()方法的类型都不会覆盖System.Object.ToString(),因此您无法使用参数在Object上调用该方法。

答案 1 :(得分:1)

ChangeType返回一个System.Object。不幸的是,只有数字类型提供了带格式的ToString重载(字符串参数)。 System.Object.ToString()不带参数。