如何在C#中动态转换并返回属性

时间:2010-05-11 03:57:35

标签: c# casting

我已经阅读过该主题的主题,但找不到合适的解决方案。

我正在开发一个带有枚举的下拉列表,并使用它来填充自己。我发现了一个VB.NET。在移植过程中,我发现它使用DirectCast()来设置返回SelectedValue的类型。

在这里查看原始的VB: http://jeffhandley.com/archive/2008/01/27/enum-list-dropdown-control.aspx

要点是,控件有

Type _enumType; //gets set when the datasource is set and is the type of the specific enum

SelectedValue属性看起来像(记住,它不起作用):

    public Enum SelectedValue  //Shadows Property
    {
        get
        {
            // Get the value from the request to allow for disabled viewstate
            string RequestValue = this.Page.Request.Params[this.UniqueID];

            return Enum.Parse(_enumType, RequestValue, true) as _enumType;
        }
        set
        {
            base.SelectedValue = value.ToString();
        }
    }

现在这触及了我认为在其他讨论中错过的核心观点。在每个例子附近,人们认为不需要DirectCast,因为在每个例子中,他们静态地定义了类型。

这不是这种情况。作为控件的程序员,我不知道类型。因此,我无法施展它。此外,以下线条示例将无法编译,因为c #casting不接受变量。 VB的CTypeDirectCast可以接受Type T作为函数参数:

return Enum.Parse(_enumType, RequestValue, true);

return Enum.Parse(_enumType, RequestValue, true) as _enumType;

return  (_enumType)Enum.Parse(_enumType, RequestValue, true) ;

return Convert.ChangeType(Enum.Parse(_enumType, RequestValue, true), _enumType);

return CastTo<_enumType>(Enum.Parse(_enumType, RequestValue, true));

那么,关于解决方案的任何想法?什么是.NET 3.5解决此问题的最佳方法?

3 个答案:

答案 0 :(得分:4)

你不需要转换为正确的类型......你只需要转换为Enum。毕竟这是属性的声明类型:

return (Enum) Enum.Parse(_enumType, RequestValue, true);

(我不确定为什么Enum.Parse没有被声明为返回Enum本身,说实话。它不像它可能是任何其他类型。)

答案 1 :(得分:1)

  • 泛型
  • return(Enum)Enum.Parse(_enumType,RequestValue,true);

第二个工作的原因是因为您不需要将值作为给定类型返回,只需将值作为 Enum 类型返回,即使它是下面的实际枚举。

答案 2 :(得分:0)

最好的.NET 2.0 / 3.5处理方法是使用泛型。