Получение Comparer & lt; T & gt; .Default, не зная тип во время выполнения [дубликат]

Мой мозг, похоже, рад принять, что lst[start:end] содержит start -й элемент. Я даже могу сказать, что это «естественное предположение».

Но иногда возникает сомнение, и мой мозг требует подтверждения того, что он не содержит end -го элемента.

В эти моменты я полагаюсь на эту простую теорему:

for any n,    lst = lst[:n] + lst[n:]

Это довольно свойство говорит мне, что lst[start:end] не содержит end -й элемент, потому что он находится в lst[end:].

Заметим, что эта теорема верна для любого n. Например, вы можете проверить, что

lst = range(10)
lst[:-42] + lst[-42:] == lst

возвращает True.

9
задан James 9 July 2012 в 15:11
поделиться

4 ответа

Метод статический, поэтому вам не нужен экземпляр объекта. Вы можете напрямую вызвать его:

public class Foo<T>
{
    public static string MyMethod()
    {
        return "Method: " + typeof(T).ToString();
    }
}

class Program
{
    static void Main()
    {
        Type myType = typeof(string);
        var fooType = typeof(Foo<>).MakeGenericType(myType);
        var myMethod = fooType.GetMethod("MyMethod", BindingFlags.Static | BindingFlags.Public);
        var result = (string)myMethod.Invoke(null, null);
        Console.WriteLine(result);
    }
}
6
ответ дан Darin Dimitrov 1 September 2018 в 03:42
поделиться

Вам нужно что-то вроде этого:

typeof(Foo<string>)
    .GetProperty("MyProperty")
    .GetGetMethod()
    .Invoke(null, new object[0]);
2
ответ дан ie. 1 September 2018 в 03:42
поделиться

Ну, вам не нужен экземпляр для вызова статического метода:

Type myGenericClass = typeof(Foo<>).MakeGenericType( 
    new Type[] { typeof(string) }
);

В порядке ... тогда просто:

var property = myGenericClass.GetProperty("MyProperty").GetGetMethod().Invoke(null, new object[0]);

должен это сделать .

3
ответ дан Kek 1 September 2018 в 03:42
поделиться
typeof(Foo<>)
    .MakeGenericType(typeof(string))
    .GetProperty("MyProperty")
    .GetValue(null, null);
3
ответ дан Paolo Moretti 1 September 2018 в 03:42
поделиться
Другие вопросы по тегам:

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