gpt4 book ai didi

c# - 私有(private)访问器类忽略通用约束

转载 作者:太空狗 更新时间:2023-10-30 00:47:40 24 4
gpt4 key购买 nike

最近,我遇到了团队系统单元测试的问题。我发现自动创建的访问器类忽略了通用约束 - 至少在以下情况下:

假设您有以下类(class):

namespace MyLibrary
{
public class MyClass
{
public Nullable<T> MyMethod<T>(string s) where T : struct
{
return (T)Enum.Parse(typeof(T), s, true);
}
}
}

如果要测试MyMethod,可以创建一个测试工程,测试方法如下:

public enum TestEnum { Item1, Item2, Item3 }

[TestMethod()]
public void MyMethodTest()
{
MyClass c = new MyClass();
PrivateObject po = new PrivateObject(c);
MyClass_Accessor target = new MyClass_Accessor(po);

// The following line produces the following error:
// Unit Test Adapter threw exception: GenericArguments[0], 'T', on
// 'System.Nullable`1[T]' violates the constraint of type parameter 'T'..
TestEnum? e1 = target.MyMethod<TestEnum>("item2");

// The following line works great but does not work for testing private methods.
TestEnum? e2 = c.MyMethod<TestEnum>("item2");
}

运行测试将失败,并出现上述代码段注释中提到的错误。问题是 Visual Studio 创建的访问器类。如果你进入它,你会得到以下代码:

namespace MyLibrary
{
[Shadowing("MyLibrary.MyClass")]
public class MyClass_Accessor : BaseShadow
{
protected static PrivateType m_privateType;

[Shadowing(".ctor@0")]
public MyClass_Accessor();
public MyClass_Accessor(PrivateObject __p1);
public static PrivateType ShadowedType { get; }
public static MyClass_Accessor AttachShadow(object __p1);

[Shadowing("MyMethod@1")]
public T? MyMethod(string s);
}
}

如您所见,MyMethod 方法的泛型类型参数没有任何约束。

这是一个错误吗?这是设计使然吗?谁知道如何解决该问题?

最佳答案

我投票给错误。我不明白这是怎么设计的。

关于c# - 私有(private)访问器类忽略通用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com