Visual Studio 将枚举传递给类中的另一个枚举以将其封装在c#中

mo49yndu  于 2023-03-03  发布在  C#
关注(0)|答案(2)|浏览(156)

对不起,我不确定这是否有意义,或者标题是否有意义。
所以我写了很多类库,它们可以用于各种各样的原因,很明显,这取决于我们要创建什么,这将决定我们是否需要创建一个类的引用。
有一点需要注意的是,我们希望把事情分开,因此有了这篇文章。在一个共享类的项目中,让我们说Letters,在那里我们有一个枚举

public enum enum1 
{
   A, 
   B, 
   C
}

在另一个类库(我们称之为Words)中,我们正在做一些使用enum1的事情,所以我们将引用项目Letters(dll)。现在我正在尝试做的是,当我们想要使用Words时,避免必须引用Letters。当引用words时,我实际上想要到达enums1。例如

Words - referencing Letters
public Enum Characters {get { return Letters.enum1; } }

Letters
public enum enum1{
   A, B, C
}
  
App - Only reference Words
Words.Characters. 

and then the list of A, B, C

我知道我可以改变

public Enum Characters {get { return Letters.enum1; } }

public Words.enum1 Characters {get; }

但这将意味着在我的应用程序中,我需要同时引用单词和字母,理想情况下我不想这样,因为有人可以引用根本不需要字母的单词。
这是否可能,又如何做到。
谢谢

bqujaahr

bqujaahr1#

如果使用场景为:

  • 存在需要共享的类型(例如enum1)。
  • 不希望将类型放入它们自己的程序集中。
  • 这些类型用于两个或多个程序集中,这些程序集永远不应相互依赖(例如,letters.dll永远不会引用words.dll,反之亦然)。
  • 使用程序集决不能依赖于多个具有共享类型的程序集(例如app.exe决不能同时引用letters.dllwords.dll)。

则可能的解决方案是使用“共享项目”。
在Visual Studio中创建新项目时,筛选C#并搜索shared
共享项目实际上并不产生输出,但是其他引用该共享项目的项目将包含该共享项目的源文件,换句话说,enum1将有一个源文件;源文件将在共享项目中;并且通过引用共享项目,letterswords将具有相同的enum1类型。
但是,由于它是同一命名空间中的同一类型,因此如果app尝试同时引用letterswords,则会出现错误,因为两个程序集中存在同一类型。

ulydmbyx

ulydmbyx2#

如果您希望避免在App项目中直接引用Letters项目,则可以在Words项目中定义enum1枚举的副本,并手动将值从原始enum1Map到enum1的新副本。这是非常不必要的,也是浪费精力的,并且可能没有达到您想要的效果。如果您不太满意,请提出明确的改进请求。
信件:

public enum enum1 {
   A, B, C
}

文字:

public enum Characters {
   A,
   B,
   C
}

public static class EnumMapper {
    public static Characters Map(enum1 value) {
        switch (value) {
            case enum1.A: return Characters.A;
            case enum1.B: return Characters.B;
            case enum1.C: return Characters.C;
            default: throw new ArgumentException($"Unknown value {value}");
        }
    }
}

应用程序:

using Words;

var character = EnumMapper.Map(enum1.A); // Map from enum1 to Characters

相关问题