难以让Enum与我合作

时间:2009-09-16 00:57:12

标签: c# asp.net vb.net drop-down-menu c#-to-vb.net

我的代码存在这个问题,编译时遇到异常。任何人都可以帮助我吗?

if (Page.IsPostBack != false)
            {
                System.Drawing.KnownColor enClr;
                System.Collections.Generic.List<System.Drawing.KnownColor> ColorList;
                ColorList.AddRange(Enum.GetValues(enClr.GetType()));

            }

我正试图在VB.Net中遵循这个指南,但我只使用C#所以我试图翻译,我可以帮助吗?

这是原始代码:

If Not IsPostBack Then
Dim enClr As System.Drawing.KnownColor
Dim clrs As New  _
System.Collections.Generic.List _
(Of System.Drawing.KnownColor)
clrs.AddRange(System.Enum.GetValues _
(enClr.GetType()))
DropDownList1.DataSource = clrs
DropDownList1.DataBind()

3 个答案:

答案 0 :(得分:1)

首先,令人困惑的是你试图翻译的方向。标签说C#到VB,但文本说VB到C#。我假设后者。考虑到这一点,这个:

If Not IsPostBack Then

和此:

if (Page.IsPostBack != false)

意思恰恰相反。你的C#应该是这样的:

if (!IsPostBack)

您还需要关注vb代码中的“New”一词。完全适应性如下:

if (!IsPostBack)
{
    DropDownList1.DataSource = System.Enum.GetValues(typeof (System.Drawing.KnownColor));
    DropDownList1.DataBind();
}

最后,在您的术语中还有一个更正:编译时错误是不是例外。 Excpetions是一个运行时构造。

答案 1 :(得分:0)

在我看来,就像你没有实例化你的列表对象一样。

System.Collections.Generic.List<System.Drawing.KnownColor> ColorList;

应该是

System.Collections.Generic.List<System.Drawing.KnownColor> ColorList;
ColorList = New System.Collections.Generic.List<System.Drawing.KnownColor>();

答案 2 :(得分:0)

好像我需要一些文字在这里...我认为其中一个适合你想要做的事情,我同意其他人关于if(!this.IsPostBack)......

if (!this.IsPostBack)
{
  //with LINQ
  System.Collections.Generic.List<System.Drawing.KnownColor> ColorList = new List<System.Drawing.KnownColor>();
  ColorList.AddRange(((System.Drawing.KnownColor[])System.Enum.GetValues(typeof(System.Drawing.KnownColor))).ToList());

  //with LINQ (more explicit)
  ColorList = new List<System.Drawing.KnownColor>();
  System.Drawing.KnownColor[] colors = (System.Drawing.KnownColor[])System.Enum.GetValues(typeof(System.Drawing.KnownColor));
  ColorList.AddRange(colors.ToList());

  //without
  ColorList = new List<System.Drawing.KnownColor>();
  colors = (System.Drawing.KnownColor[])System.Enum.GetValues(typeof(System.Drawing.KnownColor));
  foreach (System.Drawing.KnownColor color in colors)
  {
    ColorList.Add(color);
  }
}