2015-10-02 24 views
3

這是我第一次嘗試。我希望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

什麼工作對我來說是返回結果:

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

,並調用它像這樣:

parms = (NewRuleParms)TestData.Fill(parms); 
+0

而且,是的,即使在下面發生了不同的事情,我也可以在這裏使用類作爲結構。 – Art

2

您的代碼中有幾處錯誤。當作爲參數從函數傳遞和返回值類型被複制:

  1. Add(ValueType _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; 
    } 
} 
+0

#2是不是這樣。我停在調試器中,檢查字典條目。關鍵是參數的特定結構名稱。 – Art

+0

你確定'ValueType'是struct嗎? –

+0

是的。這個想法是,隨着測試用例的開發,將會使用各種結構。目標代碼定義了它們,如果測試代碼可以實例化,填充一些數據並且去,那就太好了。遠非如此,如果不在測試中,使用它的類將從用戶輸入中填充它,否則將其結構傳遞給它。 – Art

相關問題