请考虑以下两个枚举;
public enum EFileTag {
Clean,
Modified
}
public enum EHgFileTag {
Modified = 'M',
Clean = 'C'
}
使用EFileTag的值,我需要获取EHgFileTag的等效值 示例: EFileTag.Clean
的'C'我通过使用解决了这个问题;
EFileTag ft = EFileTag.Clean;
string ftstr = Enum.GetName (typeof (EFileTag), ft);
if (Enum.TryParse (ftstr, out EHgFileTag tag)) {
char hgft = (char)tag;
}
是否有更好/有效的方法来完成转换?
答案 0 :(得分:2)
您可能有一个像这样的字典
public static readonly Dictionary<EFileTag, EHgFileTag> dict = new Dictionary<EFileTag, EHgFileTag>
{
{ EFileTag.Clean, EHgFileTag.Clean },
{ EFileTag.Modified, EHgFileTag.Modified }
}
现在您可以通过传递另一个有效地获得一个枚举。
var tag = dict[EFileTag.Clean];
//tag would be EHgFileTag.Clean
//you can get the char now like you did in your example
var hgft = (char)tag;
//hgft would be 'C'
编辑:
我一直认为以这种方式使用枚举没有多大意义。当您现在要求在组合中添加另一个枚举时,我决定将概念从枚举更改为其他形式。
public enum EFileTag
{
Clean,
Modified
}
public class FileTag
{
public EFileTag EFileTag { get; private set; }
public char EHgFileTag { get; private set; }
public char EGitFileTag { get; private set; }
public FileTag(EFileTag eFileTag, char eHgFileTag, char eGitFileTag)
{
EFileTag = eFileTag;
EHgFileTag = eHgFileTag;
EGitFileTag = eGitFileTag;
}
}
public class SomeClass
{
public static readonly Dictionary<EFileTag, FileTag> tags = new Dictionary<EFileTag, FileTag>
{
{EFileTag.Clean, new FileTag(EFileTag.Clean, 'C', ' ') },
{EFileTag.Modified, new FileTag(EFileTag.Modified, 'M', 'M') },
};
var tag = tags[EFileTag.Clean];
//tag would be of class FileTag
var hgft = tag.EHgFileTag;
//hgft would be 'C'
var gft= tag.EGitFileTag;
//gft would be ' '
}
现在,您只有一个枚举来描述您的基本文件标记,并且附加了要访问的字符。这比具有多个枚举要干净得多,并且更好地理解和处理。对于将来,我建议您不要像以前那样使用枚举,因为这实际上不是应该使用它们的方式。枚举只是为了理解目的而命名枚举的一种方式,而不是携带实际值的方式。 另外,如果您想添加其他字符或其他内容,现在也可以轻松做到。
答案 1 :(得分:0)
如果您知道EHgFileTag
的名称与EFileTag
兼容(这就是标题所暗示的),这是一个解决方案。
var ft = EFileTag.Clean;
var hgft = (char)(EHgFileTag)Enum.Parse(typeof(EHgFileTag), ft.ToString());
答案 2 :(得分:0)
您的解决方案很明显,即使用另一个Enum的命名常量获取Enum值。但是您仍然可以通过以下方法对其进行增强。
获取转换价值:
|seq|key|value|
|=--+---+----=|
|I1 |A |1 |
|I1 |B |2 |
|I1 |C |3 |
|I2 |A |2 |
|I2 |C |4 |
|I3 |A |2 |
|I3 |B |4 |
'---+---+-----'
获取适当类型进行转换的方法:
try {
var d = Enum.Parse (GetRepoType (), nameof (EFileTag.Clean));
Console.WriteLine ($"USAGE: {d} - {Convert.ToChar (d)} - {(int)d}");
} catch (Exception e) {
Console.WriteLine (e);
}