Динамично создайте объект <Типа>

В моем случае сравниваемые массивы содержат только числа и строки. Эта функция покажет вам, содержат ли массивы одинаковые элементы.

function are_arrs_match(arr1, arr2){
    return arr1.sort().toString() === arr2.sort().toString()
}

Давайте проверим это!

arr1 = [1, 2, 3, 'nik']
arr2 = ['nik', 3, 1, 2]
arr3 = [1, 2, 5]

console.log (are_arrs_match(arr1, arr2)) //true
console.log (are_arrs_match(arr1, arr3)) //false
42
задан thaBadDawg 24 February 2009 в 03:20
поделиться

4 ответа

Эта ссылка должна помочь:

http://msdn.microsoft.com/en-us/library/system.activator.createinstance (По сравнению с 71) активатором .aspx

. CreateInstance создаст экземпляр указанного типа.

Вы могли перенести это в общий метод как это:

public T GetInstance<T>(string type)
{
    return (T)Activator.CreateInstance(Type.GetType(type));
}
57
ответ дан Jason Miesionczek 23 September 2019 в 13:43
поделиться

Принятие Вас имеет следующий тип:

public class Counter<T>
{
  public T Value { get; set; }
}

и имеют полностью определенное имя блока типа, можно создать его следующим образом:

string typeName = typeof(Counter<>).AssemblyQualifiedName;
Type t = Type.GetType(typeName);

Counter<int> counter = 
  (Counter<int>)Activator.CreateInstance(
    t.MakeGenericType(typeof(int)));

counter.Value++;
Console.WriteLine(counter.Value);
0
ответ дан sduplooy 23 September 2019 в 13:43
поделиться

Если тип известен вызывающей стороне, существует лучший, более быстрый путь, чем использование Активатора. CreateInstance: можно вместо этого использовать универсальное ограничение на метод, который указывает, что имеет конструктора без параметров по умолчанию.

Выполнение его этот путь безопасен с точки зрения типов и не требует отражения.

T CreateType<T>() where T : new()
{
   return new T();
}
13
ответ дан Judah Gabriel Himango 23 September 2019 в 13:43
поделиться

Вы хотите использовать Activator.CreateInstance .

Вот пример того, как он работает:

using System;
using System.Runtime.Remoting;

class Program
{
    static void Main()
    {
        ObjectHandle o = Activator.CreateInstance("mscorlib.dll", "System.Int32");

        Int32 i = (Int32)o.Unwrap();
    }
}
9
ответ дан Andrew Hare 23 September 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: