由于C#缺乏对独立功能的支持,我发现很难找到放置转换功能的地方。例如,我想将枚举转换为数字。在C ++中,我将为此创建以下独立功能:
UINT32 ConvertToUint32(const MyEnum e);
我怎样才能在C#中优雅地做到这一点?我应该创建一个虚拟静态类来保存函数,如果是,我该如何为它找到一个有意义的名字?或者我应该进行部分类转换?
有什么想法吗?
提前致谢。
更新:回想起来,我的示例选择不当,因为在枚举和int之间存在默认转换。这将是一个更好的例子:
Person ConvertToPerson(const SpecialPersonsEnum e);
答案 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
}
}