是否可以在C#中使用别名数组类型?

| 我正在尝试使用自定义异常类型进行一些序列化/反序列化工作。此类型的字段定义为:
private object[] resourceMessageParams;
我已经有了一些不错的强类型代码,并带有一些Linq表达式魔术,但是我想做得更进一步,并执行以下操作:
using ResourceMessageParamsType = object[];//<-- \"Identifier expected\" error here
/*...*/
private ResourceMessageParamsType resourceMessageParams;
/*...*/
this.resourceMessageParams = 
    (ResourceMessageParamsType)serializationInfo.GetValue(
        ReflectionHelper.GetPropertyNameFromExpression(() => 
            resourceMessageParams), typeof(ResourceMessageParamsType));
代替这个:
(object[])serializationInfo.GetValue(
    ReflectionHelper.GetPropertyNameFromExpression(() => 
        resourceMessageParams), typeof(object[]));
为了适应将来可能更改此字段的类型,因此在别名定义中只需更改一次即可。但是,编译器在
using ResourceMessageType = object[];
中的
object
处停止,抱怨期望使用标识符。更改为
Object[]
会有所帮助,但是这次括号以相同的错误消息突出显示。 有没有一种方法可以为c#中的数组类型定义别名?     
已邀请:
简而言之,您不能“别名”数组类型。 您可以通过将内容封装在ѭ6中来解决此问题,但这并不能回答您的问题。 更新: 根据ECMA标准,   使用别名指令:      
using
标识符=名称空间或类型名称; 这显然没有说明允许使用数组的任何内容。 (有关如何定义名称空间或类型名称的信息,请参阅第100页。)     
您可以定义一个称为ResourceMessageParamsType的类(或结构),并定义隐式运算符,以进行与object []之间的转换。
struct ResourceMessageParamsType
{
    private object[] value;

    private ResourceMessageParamsType(object[] value)
    {
        this.value = value;
    }

    public static implicit operator object[](ResourceMessageParamsType t)
    {
        return t.value;
    }

    public static implicit operator ResourceMessageParamsType(object[] value)
    {
        return new ResourceMessageParamsType(value);
    }
}
    
我只是从System.Array派生我的类型。如果我正确地解释了这一点,那么您所描述的是一种非OO方法,就像您在普通C语言中使用的那样。 更新-我猜你不能继承System.Array。也许有办法解决。     
using ResourceMessageParamsType = System.Array;
并不是说我假装理解此“保护序列化代码以防止类定义可能发生的更改”。 接口将是一种更清洁的方法,您是否考虑过泛型? IMO综合单元测试将确保,如果有人更改了别名类型,则所有反序列化代码仍然有效。     

要回复问题请先登录注册