Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6003969
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T01:11:48+00:00 2026-05-23T01:11:48+00:00

I expect there’s one of two answers to this, either impossible or extremely simple

  • 0

I expect there’s one of two answers to this, either impossible or extremely simple and I’ve overlooked the obvious Google query.

The underlying issue is that I have a generic object being passed in via an EventHandler that boxes the object and obfuscates the true type; only at runtime do I know what the object is.

Admittedly the dynamic keyword can get around the issue, but I’d like to not lose IntelliSense and everything if I can avoid it. Plus, it doesn’t solve not knowing what each of the properties of the generic object are without massive amounts of reflection.

EDIT: The idea is to be able to determine the true type of the an object in a method parameter, and then cast that object as it’s true type without knowing it in advance. This is but a simplified example. Boxed may have been the wrong term.

An example:

public class Program
{
    static void Main(string[] args)
    {
        var container = new Container<Containee>(
            new Containee
            {
                Property1 = Guid.NewGuid(),
                Property2 = "I'm a property!",
                Property3 = DateTime.Now
            }
        );

        var boxed = (object)container;

        var originalType = boxed.GetType();

        // DOES NOT COMPILE: would like an operation like this
        // EDIT: Request for more detail
        var actualType = boxed as originalType;
        actualType.Entity.Property2 = "But I like this better.";
    }
}

public class Containee
{
    public Guid Property1 { get; set; } 
    public string Property2 { get; set; }
    public DateTime Property3 { get; set; }
}

public class Container<T>
{
    public Container(T entity)
    {
        Entity = entity;
    }

    public T Entity { get; internal set; }
}

Clearly that won’t compile, as there’s not really a way to cast as a variable. However, I’m hoping there’s a way to get a reference to the actual object and type, or at least, a way to dynamically re-create the type.

I expect there’s something simple I’m overlooking, or a better way to get around it in general. The point is to be able to wrap any object in the container, and figure out later what it was.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T01:11:48+00:00Added an answer on May 23, 2026 at 1:11 am

    The idea is to be able to determine the true type of the an object in a method parameter

    That’s easy enough (and you’re already doing it).

    Type actualType = param.GetType();
    

    That will get you the actual concrete type of the object

    and then cast that object as it’s true type

    This is where things come off the rails a bit. The casting operator in C# (usage of which is what people refer to as “casting”) can do two things:

    1. Use type-specific explicit conversions to create a new object by applying the conversion to the existing object (note that this is a new reference that is created; the original object’s type is never changed)
    2. Allow the developer to reference an object as a type that is at a different level in its inheritance hierarchy than is currently provided (or an interface that is implemented on a type that is lower in the hierarchy than is currently referenced)

    In your case, the first option is right out; the casting operator, like all operators, is not polymorphic. That is, an operator is only applied if it is defined on the type that is being referenced, not the object that’s being referenced. If you’d like further clarification on this, let me know, but I don’t think it’s germane to your question so I’m not going to go into it further unless asked.

    The second option is the only option that could realistically apply to you, but consider the only two reasons you would want to do this:

    1. So that you can refer to the object as a specific concrete type that is at a lower level than is currently provided (in your case, your object is an object, so that’s pretty much as high as it goes)
    2. So that you can refer to an object as a type that is higher in the hierarchy so that you can bypass hidden (but not overridden) members.

    (The vast majority of casts are for reason #1)

    The reason you would want to use either of those options is so that you can have a strongly-typed object and use the various members defined on that type. But all of these things only apply to types that you know when you’re writing the code. It doesn’t make sense to cast to a type that is unknown at compile time, as casting doesn’t do anything to the actual object (it is, and shall remain, its true type; the only thing that changes is the type of the variable by which you reference the object).

    If you can provide a further fleshed-out example of what you’re actually trying to do (complete with code as you’d either like or expect it to work), I might be able to provide something modeled a little closer to what you want, but as it’s described this is as specific as I can get.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I expect this FQL query to return a non-empty array, because there are comments
When I hear a list , I expect there will be more than one
I expect there are many possible solutions to this question, I can come up
I would expect there to be three lines of output from this code, but
In short, I expect all three #{}s in the final line of this test
My use case expects heavy read load - there are two possible model design
I am posting this in the off chance there is a SCORM expert out
My expect code does this: It does a ssh connect to another machine, sends
I expect this might get some downvotes / closevotes but I'm going to ask
Ok, I'm on the verge of overthinking this. Is there a way to combine

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.