Куда поместить функции преобразования?

Поскольку C# испытывает недостаток в поддержке автономных функций, мне трудно найти, что место помещает функции преобразования. Например, я хотел бы преобразовать перечисление в число. В C++ я сделал бы следующую автономную функцию для этого:

UINT32 ConvertToUint32(const MyEnum e);

Как я могу изящно сделать это в C#? Я должен сделать фиктивный статический класс для содержания функции, и если так, как я могу найти понятное имя для него? Или я должен заставить частичный класс Преобразовать?

Какие-либо идеи?

Заранее спасибо.

Обновление: Ретроспективно, мой пример не был очень хорошо выбран, поскольку там существует преобразование по умолчанию между перечислением и интервалом. Это было бы лучшим примером:

Person ConvertToPerson(const SpecialPersonsEnum e);
8
задан Dimitri C. 4 March 2010 в 08:55
поделиться

6 ответов

Я бы пошел с:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int ConvertToInt(this MyEnum e)
        {
            var m;

            // ... Implementation

            return m;
        }
    }   
}

Тогда вы должны просто использовать MyEnum.ConvertToInt (); То же самое можно сделать для нескольких преобразований из одного класса. В двух словах о методах расширения, чертовски сексуально.


Кроме того, комментарий Эрика о преобразователях типов заставил меня погуглить. Довольно круто, однако я не уверен, как использовать их с Enum , но для других преобразований они просты, как свисток для реализации. Посмотрите здесь:

8
ответ дан 5 December 2019 в 08:23
поделиться

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

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

1
ответ дан 5 December 2019 в 08:23
поделиться

Однажды я столкнулся с подобной проблемой, и я сделал это

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
    }
}
0
ответ дан 5 December 2019 в 08:23
поделиться

Разве вы не можете просто использовать для этого гипс? (UInt32) и . Или вызовите Convert.ToUInt32 (e)

1
ответ дан 5 December 2019 в 08:23
поделиться

Идея создания статического «фиктивного класса» кажется быть тем, что предлагает Microsoft:

http://msdn.microsoft.com/en-us/library/bb383974.aspx

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

1
ответ дан 5 December 2019 в 08:23
поделиться

Приведенный выше пример выглядит как кандидат на метод расширения.
Если это невозможно, я определяю их как статические методы в статическом классе; обычно я помещаю их в статический класс XXXHelper

9
ответ дан 5 December 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: