代码之家  ›  专栏  ›  技术社区  ›  Dimitri C.

在哪里放置转换函数?

  •  8
  • Dimitri C.  · 技术社区  · 16 年前

    由于C缺乏对独立函数的支持,我发现很难找到放置转换函数的位置。例如,我想将枚举转换为数字。在C++中,我将为以下内容提供以下独立功能:

    UINT32 ConvertToUint32(const MyEnum e);
    

    我怎么能优雅地用C做这个?我应该创建一个虚拟的静态类来保存函数吗?如果是,我如何为它找到一个有意义的名称?还是应该进行分部类转换?

    有什么想法吗?

    事先谢谢。

    更新 :回想起来,我的示例选择得不太好,因为枚举和int之间存在默认转换。这将是一个更好的示例:

    Person ConvertToPerson(const SpecialPersonsEnum e);
    
    6 回复  |  直到 16 年前
        1
  •  8
  •   Community Mohan Dere    9 年前

    我同意:

    namespace ExtensionMethods
    {
        public static class MyExtensions
        {
            public static int ConvertToInt(this MyEnum e)
            {
                var m;
    
                // ... Implementation
    
                return m;
            }
        }   
    }
    

    那你就用 MyEnum.ConvertToInt(); 对于同一类中的多个转换,也可以这样做。简单来说,扩展方法是非常性感的。


    也, Eric's 关于类型转换器的评论让我谷歌搜索。非常棒,但是我不知道如何使用它们 Enum 但是对于其他转换来说,它们是干净的。看看这里:

        2
  •  9
  •   Gishu    16 年前

    上面的示例看起来像是扩展方法的候选者。
    如果这不可能,我将它们定义为静态类中的静态方法;我通常将它们放在名为XXXHelper的静态类中。

        3
  •  1
  •   Adriaan Stander    16 年前

    我建议您创建和组装包含所有 帮助程序方法/常量和枚举 这将在其他项目中使用。

    这将使您能够轻松地将此程序集与其他需要它的程序集包括在一起,并避免循环引用。

        4
  •  1
  •   Tim Goodman    16 年前

    你就不能用石膏吗? (UInt32)e . 或者打电话 Convert.ToUInt32(e)

        5
  •  1
  •   S.C. Madsen    16 年前

    创建静态“虚拟类”的想法似乎是微软建议的:

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

    我认为在您的特定示例中,进行分部类转换最有意义。

        6
  •  0
  •   Pratik Deoghare    16 年前

    我曾经遇到过类似的问题,我做到了

    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
        }
    }