Поскольку C# испытывает недостаток в поддержке автономных функций, мне трудно найти, что место помещает функции преобразования. Например, я хотел бы преобразовать перечисление в число. В C++ я сделал бы следующую автономную функцию для этого:
UINT32 ConvertToUint32(const MyEnum e);
Как я могу изящно сделать это в C#? Я должен сделать фиктивный статический класс для содержания функции, и если так, как я могу найти понятное имя для него? Или я должен заставить частичный класс Преобразовать?
Какие-либо идеи?
Заранее спасибо.
Обновление: Ретроспективно, мой пример не был очень хорошо выбран, поскольку там существует преобразование по умолчанию между перечислением и интервалом. Это было бы лучшим примером:
Person ConvertToPerson(const SpecialPersonsEnum e);
Я бы пошел с:
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int ConvertToInt(this MyEnum e)
{
var m;
// ... Implementation
return m;
}
}
}
Тогда вы должны просто использовать MyEnum.ConvertToInt ();
То же самое можно сделать для нескольких преобразований из одного класса. В двух словах о методах расширения, чертовски сексуально.
Кроме того, комментарий Эрика о преобразователях типов заставил меня погуглить. Довольно круто, однако я не уверен, как использовать их с Enum
, но для других преобразований они просты, как свисток для реализации. Посмотрите здесь:
Я бы порекомендовал вам создать и собрать все ваши вспомогательные методы / константы и перечисления , которые будут использоваться в других проектах.
Это позволит вам легко включать эту сборку в другие сборки, которые в ней нуждаются, и избегать циклических ссылок.
Однажды я столкнулся с подобной проблемой, и я сделал это
class Program
{
static void Main(string[] args)
{
string s = "123";
int n = Convert.StringToInt(s);
}
}
class Convert
{
public static int StringToInt(string s)
{
// implementation
}
public static string IntToString(int n)
{
// implementation
}
}
Разве вы не можете просто использовать для этого гипс? (UInt32) и
. Или вызовите Convert.ToUInt32 (e)
Идея создания статического «фиктивного класса» кажется быть тем, что предлагает Microsoft:
http://msdn.microsoft.com/en-us/library/bb383974.aspx
Я думаю, что в вашем конкретном примере выполнение частичного преобразования класса имеет наибольший смысл.
Приведенный выше пример выглядит как кандидат на метод расширения.
Если это невозможно, я определяю их как статические методы в статическом классе; обычно я помещаю их в статический класс XXXHelper