如何定义命名空间范围的C#别名?

sgt*_*gtz 5 .net c# alias

可以像这样在C#中定义别名

using kvp = System.Collections.Generic.KeyValuePair<string, string>;

var pair = new kvp("key", "value");
Run Code Online (Sandbox Code Playgroud)

Microsoft也定义了别名:

        int i;
        Int32 i2;
Run Code Online (Sandbox Code Playgroud)

我们如何定义命名空间中可用的别名?这是可配置的吗?


这个问题具体是关于别名......所以......不希望使用继承作为代理.在很多情况下我很满意......但是当你想要最好的描述性名称和速记版本时,我都不满意.

Tim*_* S. 5

我不认为你所要求的是真的可能.这是一个解决方法:包含一个名为kvp的类型,它是KeyValuePair<string, string>您的类型的隐式转换和隐式转换.

public struct kvp
{
    public string Key { get; private set; }
    public string Value { get; private set; }

    public kvp(string key, string value)
        : this()
    {
        Key = key;
        Value = value;
    }
    public override string ToString()
    {
        return ((KeyValuePair<string, string>)this).ToString();
    }

    public static implicit operator KeyValuePair<string, string>(kvp k)
    {
        return new KeyValuePair<string, string>(k.Key, k.Value);
    }
    public static implicit operator kvp(KeyValuePair<string, string> k)
    {
        return new kvp(k.Key, k.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以在大多数情况下使用kvp而不KeyValuePair<string, string>是非预期的效果.

如果你希望typedef的类型是一个未密封的类,你可以通过创建一个扩展它的类来做(非常接近)你想要的东西,所有基类的构造函数都是镜像和扩展的base(...).


usr*_*usr 4

您明确要求提供别名,而不是寻求解决方法。所以,我唯一的答案就是:没有办法。

using您作为示例提供的别名是每个文件的别名。C# 没有允许跨文件别名的构造。