这是我的第一次尝试。我希望Fill()中的最后一个语句可以进行成员复制,但实际上没有任何反应。毫无疑问,在编译时不知道赋值中的类型。我的目的是使用与单元测试相关的按类型键入的结构字典。如果不向我的班级添加各种结构的知识,也许无法完成。
internal class TestData
{
private static Dictionary<Type, ValueType> mTestData = new Dictionary<Type, ValueType>();
internal static void Add(ValueType _testData)
{
mTestData.Add(_testData.GetType(), _testData);
}
internal static void Fill(ValueType _runtimeData)
{
ValueType testData = mTestData[_runtimeData.GetType()];
_runtimeData = testData;
}
}
答案 0 :(得分:2)
您的代码中有几处错误。值作为参数传递并从函数返回时复制:
在Add(ValueType _testData)
中,变量_testData
将是传递参数的ValueType
字段的副本。
_testData.GetType()
将始终返回typeof(ValueType)
。
_runtimeData = testData;
修改了局部变量_runtimeData
,但无法修改传递的参数。
使用泛型和拳击值类型重新考虑。以下是代码的工作修改
internal class TestData
{
private static Dictionary<Type, object> mTestData = new Dictionary<Type, object>();
internal static void Add<T>(T _testData) where T: ValueType, struct
{
mTestData.Add(typeof(T), _testData);
}
internal static void Fill<T>(ref T _runtimeData) where T: ValueType, struct
{
T testData = (T)mTestData[typeof(T)];
_runtimeData = testData;
}
}
答案 1 :(得分:0)
对我有用的是返回结果:
internal static ValueType Fill(ValueType _runtimeData)
{
return mTestData[_runtimeData.GetType()];
}
并将其称为:
parms = (NewRuleParms)TestData.Fill(parms);