使用GetElementType()时获取空引用

时间:2016-11-24 09:57:23

标签: c# generics reflection graphql mutation

我正在努力使我的graphQL变异变得通用。但在运行时我得到一个错误。
错误说明:对象引用未设置为对象的实例。

public class ApplicationMutation<T> : ObjectGraphType where T: BaseModel
{
    public ApplicationMutation()
    {
        this.Name = "RootMutation";

        var nameofT = typeof(T).GetElementType().Name;

        this.Field<AddPayloadType<T>>(
            "add" + nameofT,
            arguments: new InputQueryArguments<AddInputType<T>>(),
            resolve: context =>
            {
                var input = context.GetArgument<AddInput<T>>("input");

                var result = Activator.CreateInstance<T>();
                {
                    Name = "1337 p40c355I73m";
                };

                return new AddPayload<T>(input, result);
            });

        this.Field<UpdatePayloadType<T>>(
            "update" + nameofT,
            arguments: new InputQueryArguments<UpdateInputType<T>>(),
            resolve: context =>
            {
                var input = context.GetArgument<UpdateInput<T>>("input");

                var result = Activator.CreateInstance<T>();
                {
                    Name = "rul0r item";
                };

                return new UpdatePayload<T>(input, result);
            });

        this.Field<DeletePayloadType<T>>(
            "delete" + nameofT,
            arguments: new InputQueryArguments<DeleteInputType<T>>(),
            resolve: context =>
            {
                var input = context.GetArgument<DeleteInput<T>>("input");

                var result = true;

                return new DeletePayload<T>(input, result);
            });
    }
}

从以下行抛出异常: var nameofT = typeof(T).GetElementType().Name;

如果需要更多信息,请直接询问。

1 个答案:

答案 0 :(得分:1)

您只能将GetElementType()用于数组,指针和引用类型..

  

如果当前Type不是数组或指针,或者未通过引用传递,或者在泛型类型或泛型方法的定义中表示泛型类型或类型参数,则返回null   https://msdn.microsoft.com/en-us/library/system.type.getelementtype.aspx

对于通用的

,它将返回null