我正在尝试使用 OpenTK 编写游戏。 每次从 GL 类调用某些内容时,我都想检查错误。
所以,比方说,我有这门课:
public static class GLCheck
{
public static void Call(function f)
{
// Call f function
CheckError();
}
public static void CheckError()
{
ErrorCode errorCode = GL.GetError();
if (errorCode != ErrorCode.NoError)
Console.WriteLine("Error!");
}
}
所以我可以这样调用函数:
GLCheck.Call(GL.ClearColor(Color.White));
GLCheck.Call(GL.MatrixMode(MatrixMode.Modelview));
GLCheck.Call(GL.PushMatrix());
我该怎么做? 谢谢
---------------- 答案: ----------------
感谢您的回答! 我刚刚意识到所有答案都在使用委托(delegate)(Action 或 Func<>) 在 .NET 2.0 上,这是不可用的,因此您必须创建自己的,这里是我的 GLCheck 类:
public static class GLCheck
{
public delegate void Action();
public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3);
public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
public static void Call(Action callback)
{
callback();
CheckError();
}
public static void Call<T>(Action<T> func, T parameter)
{
func(parameter);
CheckError();
}
}
再次感谢您的回答!
最佳答案
它不会那么整洁,但您可以使用 Lambda 函数轻松完成此操作:
GLCheck.Call(() => GL.ClearColor(Color.White));
GLCheck.Call(() => GL.MatrixMode(MatrixMode.Modelview));
GLCheck.Call(() => GL.PushMatrix());
Call
的定义如下:
public static void Call(Action a)
{
a();
CheckError();
}
对于没有参数的方法 GL 方法,您可以更干净地传递它们:
GLCheck.Call(GL.PushMatrix);
(注意PushMatrix
后没有()
。)
关于c# - 从参数调用方法(使用任何参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108940/