1
我有一些奇怪的行爲,在泛型類中定義了默認值枚舉。 MS .NET 4.0使用默認值,但mono似乎回退到第一個枚舉定義(這是零值)。錯誤的Mono嵌套在泛型類中的默認參數
我寫了一個小測試,它只能在MS .NET上正常運行,但不能在單聲道上運行。
using System;
using NUnit.Framework;
namespace enumErrorTest
{
class EnumWrapperCtor<T> {
public enum Test {
Wrong,
MyDefault
}
private readonly T otherVal;
private readonly Test myVal;
public EnumWrapperCtor (Test value = Test.MyDefault)
{
myVal = value;
}
public Test getValue()
{
return myVal;
}
public Test echo (Test value = Test.MyDefault)
{
return value;
}
}
class EnumWrapperField<T> {
public enum Test {
Wrong,
MyDefault
}
private readonly T otherVal;
private readonly Test myVal = Test.MyDefault;
public Test getValue()
{
return myVal;
}
}
class EnumWrapper {
public enum Test {
Wrong,
MyDefault
}
private readonly Test myVal;//= Test.MyDefault;
public EnumWrapper (Test value = Test.MyDefault)
{
myVal = value;
}
public Test getValue()
{
return myVal;
}
}
[TestFixture]
class Proof
{
[Test]
public void NoGenerics()
{
var ew = new EnumWrapper();
Assert.AreEqual(EnumWrapper.Test.MyDefault, ew.getValue());
}
[Test]
public void Ctor()
{
var ew = new EnumWrapperCtor<int>();
Assert.AreEqual(EnumWrapperCtor<int>.Test.MyDefault, ew.getValue());
}
[Test]
public void Field()
{
var ew = new EnumWrapperField<int>();
Assert.AreEqual(EnumWrapperField<int>.Test.MyDefault, ew.getValue());
}
[Test]
public void Echo()
{
var ew = new EnumWrapperCtor<int>();
Assert.AreEqual(EnumWrapperCtor<int>.Test.MyDefault, ew.echo());
}
}
}
失敗的測試是Ctor
和Echo
。
# nunit-console bin/Debug/enumErrorTest.exe
NUnit-Console version 2.6.0.0
Copyright (C) 2002-2012 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Unix 3.2.0.35
CLR Version: 4.0.30319.1 (Mono 4.0 (2.10.8.1 (Debian 2.10.8.1-5~dhx1~precise1)))
ProcessModel: Default DomainUsage: Single
Execution Runtime: mono-4.0
.F.F..
Tests run: 4, Errors: 0, Failures: 2, Inconclusive: 0, Time: 0.070971 seconds
Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0
Errors and Failures:
1) Test Failure : enumErrorTest.Proof.Ctor
Expected: MyDefault
But was: Wrong
at enumErrorTest.Proof.Ctor() [0x00000] in <filename unknown>:0
2) Test Failure : enumErrorTest.Proof.Echo
Expected: MyDefault
But was: Wrong
at enumErrorTest.Proof.Echo() [0x00000] in <filename unknown>:0