Мой мозг, похоже, рад принять, что 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
.
Метод статический, поэтому вам не нужен экземпляр объекта. Вы можете напрямую вызвать его:
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);
}
}
Вам нужно что-то вроде этого:
typeof(Foo<string>)
.GetProperty("MyProperty")
.GetGetMethod()
.Invoke(null, new object[0]);
Ну, вам не нужен экземпляр для вызова статического метода:
Type myGenericClass = typeof(Foo<>).MakeGenericType(
new Type[] { typeof(string) }
);
В порядке ... тогда просто:
var property = myGenericClass.GetProperty("MyProperty").GetGetMethod().Invoke(null, new object[0]);
должен это сделать .
typeof(Foo<>)
.MakeGenericType(typeof(string))
.GetProperty("MyProperty")
.GetValue(null, null);