GetOriginalTypeParameterType löst einen Objektverweis aus, der nicht auf eine Instanz einer Objektausnahme festgelegt ist

Referenz:Wie kann eine Dynamik als Generikum verwendet werden?

public void CheckEntity(int entityId, string entityType = null)
{
 dynamic AnyObject = Activator.CreateInstance("Assembly","Assembly.Models.DbModels." + entityType).Unwrap();
 CheckWithInference(AnyObject, entityId);
}

private static void CheckWithInference<T>(T ignored, int entityId) where T : class
{
 Check<T>(entityId);
}

private static void Check<T>(int entityId) where T : class
{
 using (var gr = new GenericRepository<T>())
 {
 }
}

Dies geht ein mitCheckEntity(16,"Container");. Nachdem die erste Zeile ausgeführt wurde,AnyObject wird ein LeerzeichenAssembly.Models.DbModels.Container wenn mit dem Debugger überprüft. Obvar AnyType = AnyObject.GetType(); wird dann verwendetAnyType zeigt alsAssembly.Models.DbModels.Container. Allerdings, wenn der Anruf zuCheckWithInference(AnyObject, entityId); gemacht wird, wird eine Ausnahme geworfen.

Outer: Die Objektreferenz wurde nicht auf eine Instanz eines Objekts festgelegt.inner: Microsoft.CSharp.RuntimeBinder.SymbolTable.GetOriginalTypeParameterType (Typ t) +10

Ich habe hier ein eigenständiges Beispiel gemacht - aber es läuft ohne Fehler :(

Beachten Sie, dass dies in asp.net mvc 3 c # ist.

HomeController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace InferenceExample.Controllers
{
public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    public void CheckEntity(int entityId, string entityType = null)
    {
        dynamic AnyObject = Activator.CreateInstance("InferenceExample", "InferenceExample.Models." + entityType).Unwrap();
        CheckWithInference(AnyObject, entityId);
    }

    private static void CheckWithInference<T>(T ignored, int entityId) where T : class
    {
        Check<T>(entityId);
    }

    private static void Check<T>(int entityId) where T : class
    {
        var repo = new List<T>();
    }

}
}

Beispiel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace InferenceExample.Models
{
public class Example
{
    public int ExampleId { get; set; }
    public string Name { get; set; }
}
}

Index.cshtml

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

@Html.ActionLink("Start", "CheckEntity", new { entityId = 16, entityType = "Example" })

Ich bin ratlos. Warum bekomme ich diese Ausnahme? Ich konnte es nicht einfach reproduzieren. Ich bin mir nicht sicher, was ich für das Beispiel noch hinzufügen soll, da dies alles ist, was der eigentliche Code enthält.

Der wirklich verwirrende Teil ist, dass die Aktion in der Anwendung fehlschlägt, wenn diese Ausnahme auftritt. Beim erneuten Aufrufen der Seite und einem erneuten Versuch wird jedoch keine Ausnahme ausgelöst.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage