当一个结构体和另一个结构体是相同的未知类型时,你能把它们复制到另一个结构体吗?

本文关键字:结构体 另一个 复制 类型 一个 未知 | 更新日期: 2023-09-27 18:15:50

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

当一个结构体和另一个结构体是相同的未知类型时,你能把它们复制到另一个结构体吗?

您的代码中有几个错误。值类型在作为参数传递和从函数返回时被复制:

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

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

  3. _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;
    }
}

我的工作是返回结果:

internal static ValueType Fill(ValueType _runtimeData)
{
    return mTestData[_runtimeData.GetType()];
}

,并像这样命名:

parms = (NewRuleParms)TestData.Fill(parms);
相关文章: