В моем случае сравниваемые массивы содержат только числа и строки. Эта функция покажет вам, содержат ли массивы одинаковые элементы.
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
Эта ссылка должна помочь:
. CreateInstance создаст экземпляр указанного типа.
Вы могли перенести это в общий метод как это:
public T GetInstance<T>(string type)
{
return (T)Activator.CreateInstance(Type.GetType(type));
}
Принятие Вас имеет следующий тип:
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);
Если тип известен вызывающей стороне, существует лучший, более быстрый путь, чем использование Активатора. CreateInstance: можно вместо этого использовать универсальное ограничение на метод, который указывает, что имеет конструктора без параметров по умолчанию.
Выполнение его этот путь безопасен с точки зрения типов и не требует отражения.
T CreateType<T>() where T : new()
{
return new T();
}
Вы хотите использовать 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();
}
}