С#: объединение одного Enum внутри другого (то есть, зеркалирование другого перечисления/копирование его...)

Здесь моя проблема: у меня есть объект, ссылающийся на DLL. Я хотел бы, чтобы другие объекты ссылались на мой объект, не включая также ссылку на самую DLL.

Это отлично по большей части, кроме перечисления в DLL, которое я хотел бы воспроизвести. Я мог бы написать перечисление по строкам, но мне интересно, есть ли лучший способ сделать это.

т.

Скажем, DLL получила следующее перечисление:

public enum dllEnum
{
  value1,
  value2,
  value3
}

Я мог бы сделать следующее:

public enum myEnum
{
  value1,
  value2,
  value3
}

или еще лучше:

public enum myEnum
{
  value1 = dllEnum.value1,
  value2 = dllEnum.value2,
  value3 = dllEnum.value3
}

Но в каждом из этих случаев я сам выписываю весь список перечислений. Я предпочел бы просто обернуть весь enum как свой собственный, сохранив индексы исходного перечисления.

Что-то по строкам:

public enum myEnum
{
  Enum.GetValues(dllEnum)
}

Ответ 2

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/ddedaf59-fb36-45cd-8062-446fa92d8f68

В этой статье приводятся некоторые замечательные примеры, которые могут помочь вам найти решение, благодаря которому вы динамически генерируете свой список и компилируете его во время выполнения. Я сделал это для функции типа eval в VB.Net, но я не сделал этого для перечисления.

Это не позволит проверять значения времени компиляции, так что вы будете в мире обид во многих отношениях. С DLR в .NET 4.0 я предполагаю, что у вас будет больше гибкости (хотя я признаю, что не читал подробности о следующей версии фреймворка.)