C #: Обертывание одного Enum внутри другого (т.е. отражение другого Enum / копирование его ...) - PullRequest
11 голосов
/ 02 декабря 2009

Вот моя проблема: у меня есть объект, который ссылается на 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
}

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

Что-то вроде:

public enum myEnum
{
  Enum.GetValues(dllEnum)
}

Ответы [ 2 ]

8 голосов
/ 02 декабря 2009

То, что вы спрашиваете, обсуждалось здесь:

Перечисление "Наследование"

0 голосов
/ 02 декабря 2009

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

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

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

...