É possível alias tipo de matriz em c #?

Eu estou tentando fazer algumas coisas de serialização / desserialização com um tipo de exceção personalizada. Este tipo tem um campo definido como:

private object[] resourceMessageParams; 

Eu tenho todo o código legal e fortemente tipado com alguma mágica de expressão Linq, mas eu quero ir ainda mais longe e fazer algo assim:

 using ResourceMessageParamsType = object[];// resourceMessageParams), typeof(ResourceMessageParamsType)); 

Em vez disso:

 (object[])serializationInfo.GetValue( ReflectionHelper.GetPropertyNameFromExpression(() => resourceMessageParams), typeof(object[])); 

Para acomodar possíveis alterações no tipo desse campo no futuro, será necessário alterar o tipo apenas uma vez na definição de alias. No entanto, o compilador pára no object using ResourceMessageType = object[]; reclamando que um identificador é esperado. Alterar para Object[] ajuda um pouco, mas desta vez o colchete é destacado com a mesma mensagem de erro.

Existe uma maneira de definir um alias para o tipo de matriz em c #?

Simplificando, você não pode “alias” tipos de matriz.

Você pode contornar isso encapsulando coisas em uma struct , mas isso não responde à sua pergunta.


Atualizar:

Do padrão ECMA,

using-alias-directive:

using identifier = namespace-or-type-name ;

que claramente não diz nada sobre as matrizes serem permitidas.

(Consulte a página 100 para saber como o namespace ou o nome do tipo é definido.)

Você pode definir uma class (ou struct) chamada ResourceMessageParamsType e definir operadores implícitos para conversão de e para 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); } } 

Eu apenas derivaria meu tipo de System.Array. Se eu estou interpretando isso corretamente, o que você está descrevendo é uma abordagem não-OO, como você usaria na linguagem C.

Update – Eu acho que você não pode subclass System.Array. Talvez haja uma maneira de contornar isso.

 using ResourceMessageParamsType = System.Array; 

Não que eu pretenda entender como este código de serialização “salvaguardar” contra possíveis mudanças na definição de class “para você.

Interfaces seria uma abordagem mais limpa, e você já considerou genéricos?

Os testes da Unidade Compreensiva da IMO garantirão que, se alguém alterar o tipo de alias, todo o código de desserialização ainda funcionará.