Sta*_*zev 7 c# arrays alias types
我正在尝试使用自定义异常类型执行一些序列化/反序列化的东西.此类型的字段定义为:
private object[] resourceMessageParams;
Run Code Online (Sandbox Code Playgroud)
我有一些很好的和强类型的代码与一些Linq表达魔术,但我想更进一步,并做这样的事情:
using ResourceMessageParamsType = object[];//<-- "Identifier expected" error here
/*...*/
private ResourceMessageParamsType resourceMessageParams;
/*...*/
this.resourceMessageParams =
(ResourceMessageParamsType)serializationInfo.GetValue(
ReflectionHelper.GetPropertyNameFromExpression(() =>
resourceMessageParams), typeof(ResourceMessageParamsType));
Run Code Online (Sandbox Code Playgroud)
而不是这个:
(object[])serializationInfo.GetValue(
ReflectionHelper.GetPropertyNameFromExpression(() =>
resourceMessageParams), typeof(object[]));
Run Code Online (Sandbox Code Playgroud)
为了适应将来可能更改此字段的类型,因此必须在别名定义中仅更改一次类型.但是,编译器停止在object中using ResourceMessageType = object[];抱怨的标识符的预期.更改为Object[]有所帮助,但这次括号突出显示相同的错误消息.
有没有办法在c#中为数组类型定义别名?
小智 9
您可以定义一个名为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);
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,您不能“别名”数组类型。
您可以通过将内容封装在 a 中来解决它struct,但这并不能回答您的问题。
更新:
从ECMA标准来看,
使用别名指令:
using标识符=命名空间或类型名称;
这显然没有说明任何关于允许数组的事情。
(有关如何定义命名空间或类型名称的信息,请参阅第 100 页。)