Этот код абсолютно неверен. Это трудно исправить, потому что объединяет несколько ошибок в одном процессе.
Я попытаюсь перечислить некоторые из ваших ошибок:
output
и reset_done
. output <= output + 1;
не могут быть синтезированы или создадут бесконечный цикл в симуляции reset_done
и reset_cnt
бесполезны, поскольку они всегда '1'
reset_cnt
является целым числом, это не может быть AND с булевым значением из выражения counter = 24
output <= output;
If ty
is known at compile-time, why don't just
void Foo<T>()
{
var result = serializer.Deserialize<T>(inputContext);
}
Otherwise,
MethodInfo genericDeserializeMethod = serializer.GetType().GetMethod("Deserialize");
MethodInfo closedDeserializeMethod = genericDeserializeMethod.MakeGenericMethod(ty);
closedDeserializeMethod.Invoke(serializer, new object[] { inputContext });
Используйте
void Foo<T>(){ var result = serializer.Deserialize<T>(inputContent); }
со следующим вызовом
Foo<Person>();
Which serializer is that? If you only know the Type
at runtime (not compile time), and it doesn't have a non-generic API, then you might have to use MakeGenericMethod
:
void Foo(Type ty)
{
object result = typeof(ContainingClass).GetMethod("Bar").
.MakeGenericMethod(ty).Invoke(null, new object[] {inputContent});
}
public static T Bar<T>(SomeType inputContent) {
return serializer.Deserialize<T>(inputContent);
}
In this case, just do this:
void Foo<ty>()
{
var result = serializer.Deserialize<ty>(inputContent);
}
Foo<Person>();
Otherwise, you need to call the generic method late-bound, since you have to get the correct generic method for it first (it is not known at compile time). Have a look at the MethodInfo.MakeGenericMethod method.
Like Lucero said,
void Foo<ty>()
{
var result = serializer.Deserialize<ty>(inputContent);
}
Foo<Person>();
typeof(Person) is not the same thing as Person. Person is a compile-time type, whereas typeof(Person) is an expression that returns a Type instance representing the runtime type information of Person.