Отследить мою ошибку в этом фрагменте кода в C #? - PullRequest
0 голосов
/ 12 октября 2010

Я просто хочу использовать оператор switch вместо закомментированных строк ниже. Если значением по умолчанию является целое число.

Итак, мой код не работает, пожалуйста, укажите мою ошибку.

ParameterInfo[] pif = m.GetParameters();
foreach (ParameterInfo p in pif) {
    string ParamType = p.ParameterType.ToString();
    string ConvPType = ConvertToShortForm(ParamType);
    if (p.IsOut)
        ConvPType = ConvPType.Replace("ref", "out");
    strMethodName += ConvPType;
    strMethodName += " ";
    strMethodName += p.Name;

    if (p.IsOptional) {
        var optional_value = p.DefaultValue;
        switch (optional_value) {
            case "":
                strMethodName += @"""" + @"""";
                break;
            case null:
                strMethodName = strMethodName + "=" + "null";
                break;
            case "False":
                strMethodName += " = " + p.DefaultValue.ToString().ToLower();
                break;
            default: strMethodName += ", ";
                break;
        }
    //...
    }
//...
}

Комментируемые строки:

//if (p.DefaultValue != null)
//    strMethodName += " = " + p.DefaultValue.ToString().ToLower();
//if (p.DefaultValue == null)
//    strMethodName = strMethodName + "=" + "null";
//if (strMethodName.EndsWith("= "))
//    strMethodName += @"""" + @"""";

1 Ответ

1 голос
/ 12 октября 2010

Вы должны использовать p.DefaultValue.ToString(), чтобы использовать optional_value в качестве выражения в операторе switch.

MSDN говорит, что выражение в операторе switch должно быть целочисленного или string типа.Вы передали выражение типа object.Здесь твоя ошибка.

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