2016-07-25 37 views
-2

我必須從兩個類似的解決方案合併C#代碼,但我有一些問題與枚舉。 該項目使用.net2.0,我也必須使用它以及。 這些項目有一個包含具有相同的名稱,但一些差異枚舉一些常見的類:C#代碼與枚舉稍有區別合併

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Net; 

namespace MyProject 
{ 
    public enum LETTERS 
    { 
     non = 0, 
     a = 1, 
     b = 2, 
     c = 3 
    } 

    public class MyClass 
    { 
    public int v = 0; 
    . 
    . 
    . 
    public LETTERS lt = 0; // my enum 
    } 
} 

也有這個「枚舉」像許多其他用途:

tmpChild.Type == typeof(LETTERS); 

this._data.LTR = (LETTERS)valueListUpDown_LTS.Value; 

AddData(new SFunc(0,typeof(LETTERS), LETTERS.A)); 

LETTERS letters = LETTERS.a; 

第二個項目是相同的但枚舉看起來是這樣的:

public enum LETTERS 
    {   
     a = 0, 
     b = 1, 
     c = 2 
    } 

有這些枚舉的許多各種用途中的代碼和代碼中有使用該組件作爲ref許多項目ference。 我想知道什麼是合併這些解決方案的最佳方法。 我想到了一種根據字符串返回枚舉類型的方法,但不知道如何在所有情況下實現或使用返回的類型。

請諮詢

---------- ----------編輯

一些其他方面的限制,我已經是:

我可以」 t使用可空類型或更改枚舉值(我可以更改它們的名稱) ,因爲在某些情況下,有序列化程序會將它從文件寫入\並讀取它。

我想用這樣的方法:

 public static Type LETTERS(string letters_type) 
     { 
      if (letters_type == "type_a") 
       return typeof(LETTERS); 
      return typeof(LETTERS_B); 
    } 

但不知道如何在每一種情況下 投和使用類型爲枚舉在運行時,我知道我應該使用哪個枚舉的版本,這就是爲什麼這種方法可以幫助。

感謝

+0

「合併」的結果會是怎樣的? – ntohl

+0

我不知道任何超級簡單和/或標準的方式來處理這個。您可以保留兩個相互衝突的枚舉並通過名稱空間將它們分開,然後更新所有引用以使用完全限定名稱,或者可以合併它們並根據需要手動更新引用以正確使用合併的枚舉。在嘗試創建某種「參數化多態枚舉」之前,我會推薦使用這兩種方法中的任何一種,這不會是標準的C#枚舉。 – SlimsGhost

+0

非常感謝,不同的命名空間可能是一個選項。 我編輯了我的問題,並添加了一些約束,我有 –

回答

3

如果你的主要目的是合併這兩個代碼庫並刪除重複,我會首先使用ReSharper的重命名枚舉之一的項目之一,然後合併代碼庫,那麼我會全部更換對第二個枚舉的引用(沒有「non」的引用)引用第一個枚舉,並確保它們是「+1」。

我認爲你也可以考慮一個可爲空的枚舉,而不是「魔術」0值。但我不確定這是否可以在.net 2.0中使用。另外,在使用可空枚舉枚舉時,要小心使用自動映射器,如果你不小心,可以將值設置爲零。

+1

resharper是不需要重新命名一個類型的解決方案,是嗎?這是內置於Visual Studio中的。 –

+0

雖然我認爲resharper更徹底。 –

+0

非常感謝! 我編輯了我的問題,並添加了一些約束,我有 –