我如何实现类型函数

时间:2012-02-23 09:42:48

标签: asp.net

我创建了一个函数,它根据指定的类型返回值。

代码:

private T FindCellValue<T>(GridViewRow grdRow, string cntName)
        {
            var currColType = grdRow.FindControl(cntName);
            object val = currColType;
            if (currColType is HiddenField)
            {
                val = ((HiddenField)currColType).Value;
            }
            if (currColType is TextBox)
            {
                val = ((TextBox)currColType).Text;
            }
            if (currColType is HtmlInputText)
            {
                val = ((HtmlInputText)currColType).Value;
            }
            if (currColType is DropDownList)
            {
                var selectedItem = ((DropDownList)currColType).SelectedItem;
                val = new string[] { selectedItem.Text, selectedItem.Value };
            }
            if (currColType is RadDateTimePicker)
            {
                val = ((RadDateTimePicker)currColType).SelectedDate;
            }

            if (!(val is Control || val is WebControl || val is HtmlInputControl) && string.IsNullOrEmpty(Convert.ToString(val)))
            {
                return default(T);
            }
            return (T)val;
        }

此代码在进行类型转换时失败很多次。我如何有效地实施它?

2 个答案:

答案 0 :(得分:1)

如果T与控件的值不匹配, 你需要什么错误处理?返回默认值(T)或抛出异常?

至少检查

if (currColType is DropDownList)
{
    if (typeof(T) != typeof(string[]))
        return default(T); //or throw exception
}

if (currColType is RadDateTimePicker)
{
    if (typeof(T) != typeof(DateTime))
        return default(T); //or throw exception
}

答案 1 :(得分:1)

通用类型用于重用代码并避免运行时转换成本,但在您的情况下并非如此。因此,可以在此上下文中使用返回对象的简单函数。然后,您可以在调用函数类型中将其强制转换为所需类型。

错误处理: 如果您输入对象的类型 (type)对象如果类型转换不成功,它将返回invalidcastexception,因此您可以检查相同的内容。

你也可以使用as作为类型转换的运算符并检查null值,它会比上面的方法更快。