我想将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);
}
}
}
答案 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()不带参数。