我的代码存在这个问题,编译时遇到异常。任何人都可以帮助我吗?
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()
答案 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);
}
}