您是否可以将结构复制到另一个结构,如果它们都相同,未知,请键入

时间:2015-10-02 19:40:54

标签: c# struct

这是我的第一次尝试。我希望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;
    }
}

2 个答案:

答案 0 :(得分:2)

您的代码中有几处错误。值作为参数传递并从函数返回时复制:

  1. Add(ValueType _testData)中,变量_testData将是传递参数的ValueType字段的副本。

  2. _testData.GetType()将始终返回typeof(ValueType)

  3. _runtimeData = testData;修改了局部变量_runtimeData,但无法修改传递的参数。

  4. 使用泛型和拳击值类型重新考虑。以下是代码的工作修改

    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);