【发布时间】:2012-03-14 20:20:00
【问题描述】:
这是对thread 的跟进,我认为昨天已经解决。昨天我在以下情况下遇到了我的代码问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
class Bar
{
int v;
public Bar(int v) { this.v = v; }
public override string ToString() { return v.ToString(); }
}
static void Main(string[] args)
{
Foo(1, 2, 3);
Foo(new int[] { 1, 2, 3 });
Foo(new Bar(1), new Bar(2), new Bar(3));
Foo(new Bar[] { new Bar(1), new Bar(2), new Bar(3) });
System.Threading.Thread.Sleep(20000);
}
static void Foo(params object[] objs)
{
Console.WriteLine("New call to Foo: ");
foreach(object o in objs)
Console.WriteLine("Type = " + o.GetType() + ", value = "+o.ToString());
}
}
}
如果你运行它,你会发现最后一次调用 Foo 有问题。参数是向量的事实是“丢失”的。
所以....有人知道如何报告 C# 编译器错误吗?或者这会被认为是反射错误吗?
(真是如释重负:我很沮丧地认为我在自己的错误上浪费了时间。事实上,这毕竟是一个 C# 错误,我被证明是正确的!而且我们多久能看到一次实际的这些天 C# 编译器的错误?不常见...)
【问题讨论】:
-
我认为 C# 5 处于 beta 版本中...
-
能否请您发布您的测试的完整源代码?
-
您的代码中有一个错误,
new Foobar(3))的右括号太多了,不是吗? -
目前还不清楚您认为该错误是什么,但它在早期编译器版本中的工作方式没有任何不同。试试吧。如果您只想传递一个参数,那么您必须使用 Foo(new object[] { new FooBar[] {...} });
-
这不是 C# 编译器错误。