转换的扩展方法

本文关键字:方法 扩展 转换 | 更新日期: 2023-09-27 17:58:47

让我们假设我有一个类,如下所示:

public class PhysicalMemory 
{ 
    public string Localtion { get; internal set; } 
    public ulong Capacity { get; internal set; } 
    public string Manufacturer { get; internal set; } 
    public string Part_Number { get; internal set; } 
    public string Serial_Number { get; internal set; } 
    public uint Speed { get; internal set; }
}

我需要一个扩展方法来将我的容量从字节转换为KBytes、MBytes和。。。。。如果用户想要,例如:

PhysicalMemory phM = New PhysicalMemory();
ulong capacity_in_bytes = phM.Capacity;
ulong capacity_in_KB = phM.Capacity.ToKBytes();
ulong capacity_in_MB = phM.Capacity.ToMBytes();

转换的扩展方法

为此目的使用扩展方法是没有意义的。即使可以像其他人在这里展示的那样编写扩展方法,你也需要远离这样做。如果你写一个,它只是一个将X ulong转换为Y ulong的方法。

在这里,您所能做的最好的事情就是添加相应的属性或转换容量的方法。我更喜欢只读属性。这甚至比使用单独的扩展方法更简单。

public class PhysicalMemory 
{ 
    public ulong Capacity { get; internal set; } 
    public ulong CapacityMB { get { return Capacity / (1024 * 1024); } } 
    public ulong CapacityKB { get { return Capacity / 1024; } } 
}
public static class ULongExtensions
{
    public static ulong ToKBytes(this ulong memory)
    {
        return memory / 1024;
    }
    public static ulong ToMByptes(this ulong memory)
    {
        return memory.ToKBytes() / 1024;
    }
}     

如果您已经创建了类PhysicalMemory,那么创建扩展方法就没有意义了。这些用于扩展无法修改的类(出于某种原因)。

ulong中存储MB值也是没有意义的。这样就不会区分2.1 MB2.2 MB。我认为你不希望这种行为,最好使用decimal还是double

然而,你可以这样做:

public static class MyExtensions
{
    public static decimal ToKBytes(this ulong value)
    {
        return value / (decimal)1024;
    }
    public static decimal ToMBytes(this ulong value)
    {
        return value / ((decimal)1024 * 1024);
    }
}

我强烈建议不要用这些方法扩展ulong类型。这对我来说没有任何意义。要么创建一些转换模块,要么将方法添加到你的类中(可能作为属性)