“System.Convert”并不包含“todouble”的定义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“System.Convert”并不包含“todouble”的定义相关的知识,希望对你有一定的参考价值。
这是怎么回事
System.Convert.ToDouble()todouble->ToDouble
改为大写。 参考技术A System.Convert.ToDouble()
扩展 System.Convert
【中文标题】扩展 System.Convert【英文标题】:Extending System.Convert 【发布时间】:2012-04-29 02:37:07 【问题描述】:System.Convert 有一个非常有用的实用程序,可以将数据类型从一种类型转换为另一种类型。在我的项目中,我有许多自定义类型。我想将命令行参数转换为这些自定义类型(其中一些非常复杂)。如果这些存在于 System.Convert 中那就太好了,这样我就可以做这样的事情:
Convert.ToMyCustomType(args[1])
我希望它在我键入时显示在 Visual C# IDE 中。我知道我可以简单地创建一个例程来转换类型,但我希望以与框架中已经内置的方式相同的方式处理类型转换。过去有没有人成功做到这一点?
【问题讨论】:
这样的东西会给你什么超越扩展方法? @Oded: Convert 是一个静态类。 @JonSkeet - 当然是……没想到。 【参考方案1】:不,您不能将它们添加到 Convert
类中 - 我建议将转换方法添加到您的实际类型中,例如:
MyCustomType.FromInt32(...)
而实例方法则相反:
int x = myCustomType.ToInt32();
(静态工厂方法通常比添加大量重载的构造函数更好,IMO。它们允许各种替代方法 - 包括在适当的情况下返回空值或缓存 - 并且可以使调用代码更清晰。)
我还强烈建议您不要在您提供的转化次数上过分。没有多少自定义类型真正从各种原始类型进行单一自然转换。
【讨论】:
这可能是下一个最好的事情。谢谢!【参考方案2】:首先,System.Convert 不是命名空间;它是一个静态类(有关更多信息,请参阅documentation)。您可以编写自己的 Convert 类!
static class Convert
static MyCustomType ToMyCustomType(string value)
//logic here...
如果您想在使用 System.Convert 的同一文件中使用此类,您可能需要为其指定另一个名称,以减少歧义。
【讨论】:
【参考方案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;
【讨论】:
【参考方案4】:Convert
是一个静态类,不能扩展。
但是,您可以根据需要使用Convert.ChangeType()
。
【讨论】:
【参考方案5】:如果您知道类型 - 或类型 - 您将从您进行转换可以使用扩展方法(但不是 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
函数)。
【讨论】:
以上是关于“System.Convert”并不包含“todouble”的定义的主要内容,如果未能解决你的问题,请参考以下文章
C#报错:at System.Convert.ToDateTime(String value)
C#报错:at System.Convert.ToDateTime(String value)