System.Convert有一个非常有用的实用程序,用于将数据类型从一种类型转换为另一种类型。在我的项目中,我有很多自定义类型。我想将命令行参数转换为这些自定义类型(其中一些非常复杂)。如果这些在System.Convert中存在会很好,所以我可以这样做:
Convert.ToMyCustomType(args[1])
我想在我输入的时候在Visual C#IDE中显示它。我知道我可以简单地创建一个转换类型的例程,但我希望类型转换的处理方式与已经构建到框架中的方式相同。过去有没有人成功做到这一点?
答案 0 :(得分:15)
不,您无法将它们添加到Convert
课程 - 我建议您将转化方法添加到实际类型中,例如:
MyCustomType.FromInt32(...)
和实例方法走另一条路:
int x = myCustomType.ToInt32();
(静态工厂方法通常比添加大量重载构造函数IMO更好。它们允许各种替代方法 - 包括在适当的地方返回空值或缓存 - 并且可以使调用代码更清晰。)
我还强烈建议您不过分关注您提供的转化次数。没有多少自定义类型真正具有来自各种原始类型的单一自然转换。
答案 1 :(得分:3)
不幸的是System.Convert
是一个静态类,你不能扩展静态类。您只能从object
派生静态类。
可能的方法是提供转换运算符(隐式或显式)
public class MyClass
{
public static explicit operator MyClass(SomeOtherType other)
{
return new MyClass { /* TODO: provide a conversion here*/ };
}
public static explicit operator SomeOtherType(MyClass x)
{
return new SomeOtherType { /* TODO: provide a conversion here*/ };
}
}
通过此声明,您可以执行此操作
MyClass myClass = new MyClass();
SomeOtherType other = (SomeOtherType)myClass;
或者
SomeOtherType other = new SomeOtherType();
MyClass myClass = (MyClass)other;
答案 2 :(得分:2)
首先,System.Convert不是命名空间;它是一个静态类(有关更多信息,请参阅documentation)。你可以编写自己的Convert类!
static class Convert
{
static MyCustomType ToMyCustomType(string value)
{
//logic here...
}
}
如果要在使用System.Convert的同一文件中使用此类,可能需要为其添加另一个名称,以减少歧义。
答案 3 :(得分:0)
Convert
是一个静态类,你不能扩展它。
但是,您可以根据需要使用Convert.ChangeType()
。
答案 4 :(得分:0)
如果您知道一个或多个类型,您将可以使用扩展方法(但不是System.Convert
的扩展方法,如其他地方所述)。
例如,从字节数组转换为十六进制字符串(例如,当您希望从哈希中获得格式正确的十六进制字符串时),您可以执行以下操作:
''' <summary>Converts a byte array to a hexadecimal string.</summary>
''' <param name="Item">Required. The array of byte to convert.</param>
''' <returns>A hexadecimal string if converted successfully, error otherwise.</returns>
<Extension()>
Public Function [ToHexString](
ByVal Item As Byte()) As String
Dim Result As String = ""
If Item IsNot Nothing Then
For Each b As Byte In Item
Result += b.ToString("X2")
Next b
End If
Return Result
End Function
用法:
Dim myHexString As String = myByteArray.ToHexString()
结果:
FEE53B1AB64BD74AF8A95A9D4078141F196BA7A3
如果想花哨的话,可以添加一个可选参数来选择结果的大写或小写。
您可以根据要转换的类型重载方法,因此可以有一个用于从Long
进行转换的方法(尽管已经可以使用标准的String
函数进行转换)。