我必须合并来自两个类似解决方案的C#代码,但我对枚举有一些问题。 项目使用 .net2.0,我也必须使用它。 这些项目有一些共同的类,其中包含具有相同名称的枚举,但有些不同:
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
}
}
此“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
}
代码中有许多这些枚举的用法,代码中有很多项目使用这个程序集作为参考。 我想知道合并这些解决方案的最佳方法是什么。 我想一个根据字符串返回枚举类型但不知道如何在所有情况下实现或使用返回类型的方法。
请建议
----------编辑----------
我有一些其他限制:
我不能使用可空类型或更改枚举值(我可以更改其名称) 因为在某些情况下有序列化器可以从文件中写入和读取它。
我想使用这样的方法:
public static Type LETTERS(string letters_type)
{
if (letters_type == "type_a")
return typeof(LETTERS);
return typeof(LETTERS_B);
}
但是不知道如何在每种情况下使用Type作为枚举 在运行时我知道应该使用哪个版本的枚举,这就是为什么这样的方法可以帮助。
由于
答案 0 :(得分:3)
如果您的主要目的是合并两个代码库并删除重复,我首先会使用Resharper重命名其中一个项目中的一个枚举,然后合并代码库然后我将所有引用替换为第二个enum(没有“non”的那个)引用第一个枚举,并确保我“+1”它们。
我认为你也可以考虑一个可以为空的枚举,而不是“魔法”0值。我不确定这是否在.net 2.0中可用。另外,在使用可空的枚举时要小心使用自动映射器,如果你不小心,可以将值设置为零。