Create an instance of a class from an instance of the type of its generic parameter
By : NeonVibe
Date : March 29 2020, 07:55 AM
I hope this helps . I want to do this: , You can use a custom implicit operator, e.g: code :
public static implicit operator ValueContainer<T>(T value) {
return new ValueContainer { Value = value };
}
|
Is it possible create a new instance of a generic type inside the body of a generic method?
By : user2098770
Date : March 29 2020, 07:55 AM
around this issue You can have your generic type implement an interface. Then place restrictions in your generic method to only accept types that implement that interface. This will allow you to call methods on your newly constructed item as it's known to have those methods. code :
public interface ITest
{
void DoSomething();
}
public void GetData<T, U>(T varA, int acao) where U: ITest, new()
{
var item = new U();
item.DoSomething();
}
|
Create instance of class with generic type and call method of same generic type from string name of object at runtime
By : lukawanjohi
Date : March 29 2020, 07:55 AM
Hope this helps I have a generic class that has a generic method that uses the same type as the type passed when instantiating the object. At runtime, I will only know the name of the object I need to pass in by a string representation of that object name. I've read a few things about using Activator and possibly using dynamic but I can't wrap my head around how I need to make this work. Here's a snippet of what my generic class looks like: , Your wrapper got the following signature: code :
public class MyClass<T> where T : class, new()
var obj = new T();
public class MyClass<T> where T : class, new()
{
public IList<T> MyMethod(Stream stream)
{
var data = new List<T>();
//this
var obj = new T();
return data;
}
}
var obj = new T();
//get type information
var type = obj.GetType();
//find a public method named "DoStuff"
var method = type.GetMethod("DoStuff");
// It got one argument which is a string.
// .. so invoke instance **obj** with a string argument
method.Invoke(obj, new object[]{"a string argument"});
var type = Type.GetType("Some.Namespace.ClassName");
var obj = Activator.CreateInstance(type);
var type = Type.GetType("Some.Namespace.ClassName, SomeAsseblyName");
var obj = Activator.CreateInstance(type);
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(x => x.Name == "YourName");
var obj = Activator.CreateInstance(type);
|
Create instance of a generic type that takes a parameter a secondary generic type
By : Saul CI
Date : March 29 2020, 07:55 AM
will be helpful for those in need After Abion47 pointed out that Activator.CreateInstance shouldn't have any issues doing what I need it to do I looked a bit more into the issue and made it work. For anyone that might come across this: code :
public abstract class Sentinel<T,U> where T: new() where U: new()
{
public T CreateModel(IDictionary<String, Object> parametersDictionary)
{
T toReturn ;
if (ValidateDictionary(parametersDictionary) != true)
return default(T);
else
{
U parameters = ParseDictionaryToParameters(parametersDictionary);
toReturn = (T)Activator.CreateInstance(typeof(T), new object[] {parameters});
}
//If we got this far then everything should be fine.
return toReturn;
}
public abstract U ParseDictionaryToParameters(IDictionary<String, Object> parametersDictionary);
public abstract Boolean ValidateDictionary(IDictionary<String, Object> parametersDictionary);
}
|
Create instance of generic class with dynamic generic type parameter
By : Lisa Jack
Date : March 29 2020, 07:55 AM
wish of those help I found very simple solution to problem. There is no need to cast object to specific type T, just use dynamic keyword instead of casting code :
Type myGeneric = typeof(MyComparer<>);
Type constructedClass = myGeneric.MakeGenericType(T);
object created = Activator.CreateInstance(constructedClass);
dynamic comparer = created; // No need to cast created object to T
return comparer.Equals(myResultAsT, correctResultAsT);
|