在哪里放置转换功能?

时间:2010-03-04 07:40:28

标签: c# coding-style

由于C#缺乏对独立功能的支持,我发现很难找到放置转换功能的地方。例如,我想将枚举转换为数字。在C ++中,我将为此创建以下独立功能:

UINT32 ConvertToUint32(const MyEnum e);

我怎样才能在C#中优雅地做到这一点?我应该创建一个虚拟静态类来保存函数,如果是,我该如何为它找到一个有意义的名字?或者我应该进行部分类转换?

有什么想法吗?

提前致谢。

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

Person ConvertToPerson(const SpecialPersonsEnum e);

6 个答案:

答案 0 :(得分:9)

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

的静态类中

答案 1 :(得分:8)

我会选择:

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

            // ... Implementation

            return m;
        }
    }   
}

然后你只需使用MyEnum.ConvertToInt();同样可以在同一个类中进行多次转换。扩展方法简而言之,该死的性感。


此外,关于类型转换器的Eric's评论让我用谷歌搜索。非常棒,但是我不确定如何将它们与Enum一起使用,但对于其他转换,它们是干净利落的实施方式。看看这里:

答案 2 :(得分:1)

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

这将允许您轻松地将此程序集包含在需要它的其他程序集中,并避免循环引用。

答案 3 :(得分:1)

难道你不能只为此使用演员吗? (UInt32)e。或者拨打Convert.ToUInt32(e)

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

我曾经遇到类似的问题而且我做了这个

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