从枚举隐式转换为另一种类型(CloudBlobContainer)

时间:2012-07-19 14:58:12

标签: c# enums azure-storage implicit-conversion

是否可以将枚举转换为另一个对象?

我已经创建了一个blob容器列表。我想隐式地将枚举类型转换为命名的CloudBlobContainer

这是我尝试过的一个例子

public static class BlobContainerCasts
{
    public static implicit operator CloudBlobContainer(EnumTypes.BlobContainerNames BlobContainerName)
    {
        return CloudStorageAccount.DevelopmentStorageAccount.CreateCloudBlobClient().GetContainerReference(Enum.GetName(typeof(EnumTypes.BlobContainerNames), BlobContainerName));
    }
}

不幸的是,它不会编译,因为它不遵守有关用户定义转换的规则(它必须转换为封闭类型或从封闭类型转换)

那么,有没有办法在不创建像这样的方法的情况下做到这一点?

public CloudBlobContainer GetBlobContainer(EnumTypes.BlobContainerNames BlobContainerName)
{...}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用扩展方法:

public static CloudBlobContainerExtensions {
    public static CloudBlobContainer GetContainer(this EnumTypes.BlobContainerNames BlobContainerName)
    {
        return CloudStorageAccount.DevelopmentStorageAccount.CreateCloudBlobClient().GetContainerReference(Enum.GetName(typeof(EnumTypes.BlobContainerNames), BlobContainerName));
    }
}
//elsewhere
var myContainer = CloudBlobContainer.GetContainer(EnumTypes.BlobContainerNames.SomeName);

附注:您确定要显式引用DevelopmentStorageAccount而不是从设置中提取存储帐户吗?

答案 1 :(得分:0)

基于breischl answere,这是解决方案:

public static CloudBlobContainerExtensions {
    public static CloudBlobContainer GetContainer(this EnumTypes.BlobContainerNames BlobContainerName)
    {
        return CloudStorageAccount.DevelopmentStorageAccount.CreateCloudBlobClient().GetContainerReference(Enum.GetName(typeof(EnumTypes.BlobContainerNames), BlobContainerName));
    }
}

//elsewhere
var myContainer = EnumTypes.BlobContainerNames.somename.GetContainer();