C#“as”关键字,包含各种类型的对象

时间:2011-01-31 15:49:35

标签: c#

如何正确地将此代码重写为万无一失与各种类型的输入参数?例如,如果输入参数是DateTime的有效实例,则此代码将失败。我刚刚想出来了 - 今天错误地返回了false

    public override bool IsValid(object value)
    {
        string field = value as string;

        if (String.IsNullOrEmpty(field))
            return false;

        return true;
    }

如果没有多个if语句(对于每个可能的值),这将是否可行 类型,甚至是一些引用类型,如字符串)。

编辑:哦,当然,要求对象不是null或空格(因此它必须是可转换的或可解析为字符串,我猜)。

3 个答案:

答案 0 :(得分:4)

您对as的使用似乎不典型且不必要地模糊不清。如果您的目标是在对象为null或为空时返回false,请改为使用此代码:

public override bool IsValid(object value)
{
    if (value == null || string.IsNullOrEmpty(value.ToString()))
        return false;

    return true;
}

如果您正在使用.NET 4并且想要检查空格而不仅仅是空字符串,则新string.IsNullOrWhiteSpace()值得查看而不是string.IsNullOrEmpty()

答案 1 :(得分:2)

为什么不使用value.ToString()? [空检后]

public override bool IsValid(object value)
{
    if(value==null)
       return false;
    string field = value.Tostring();

    if (String.IsNullOrEmpty(field))
        return false;

    return true;
}

答案 2 :(得分:0)

任何对象都可以转换为字符串,因为它具有ToString方法。检查引用是否为null,然后将其转换为字符串并检查长度:

public override bool IsValid(object value) {
  return value != null && value.ToString().Length > 0;
}