C # ChangeType и ToString? - PullRequest
       14

C # ChangeType и ToString?

0 голосов
/ 05 августа 2009

Я хочу преобразовать int в определенный тип и затем вернуть строку, формат которой зависит от типа, в который я ее преобразовал.
У меня есть свойство, которое возвращает объект 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 ]

3 голосов
/ 05 августа 2009

Попробуйте отформатировать строку с помощью String.Format вместо использования Object.ToString():

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

Любой тип, который реализует форматируемый ToString() метод, не переопределяет System.Object.ToString(), и поэтому вы не можете вызывать этот метод для Object с параметрами.

1 голос
/ 05 августа 2009

ChangeType возвращает System.Object. К сожалению, только числовые типы обеспечивают перегрузку ToString форматом (строковый параметр). System.Object.ToString () не принимает параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...