“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”的定义的主要内容,如果未能解决你的问题,请参考以下文章

关于System.Convert那些事

C#报错:at System.Convert.ToDateTime(String value)

C#报错:at System.Convert.ToDateTime(String value)

C#报错:at System.Convert.ToDateTime(String value)

在 Eclipse 中查找 TODO 标签

vscode 插件TODO的使用