在C#中使用setter作为参数? (也许有代表吗?)

我们正在为某些硬件开发API,而我正在尝试用C#为其编写一些测试.重复任务的try-catch块使我的代码变得肿且重复,因此对于吸气剂,我能够像这样包装:

TestGetter(Func<int> method, double expectedVal)
{
    int testMe = 0;
    try
    {
        testMe = method();
        PassIfTrue(testMe == expectedVal);
    }
    catch (Exception e)
    {
         Fail(e.Message);
    }
}

因此,我向硬件查询一些已知值并进行比较.我可以打电话给:

TestGetter( () => myAPI.Firmware.Version, 24); //Or whatever.

哪个效果很好.但是我不确定如何使用二传手.即确保API实际设置了一个值(并且在尝试设置时不会超时或发生任何错误).我想将setter传递给test方法并在其中调用它.

额外的问题:是否可以使用泛型类型做到这一点? API中定义了一些自定义类型,但我不确定是否为每个类型编写这些测试包装而没有为每种类型编写新的重载方法的好方法.感谢您提供的所有帮助!

解决方法:

您可以将getter和setter传递给函数:

void TestSetter<T>(Func<T> getter, Action<T> setter, T value)
{
    try
    {
        setter(value);
        PassIfTrue(EqualityComparer<T>.Default.Equals(getter(), value));
    }
    catch (Exception e)
    {
         Fail(e.Message);
    }       
}

这将设置值,然后获取并与传递给设置器的值进行比较.

您必须这样称呼它:

TestSetter(() => myAPI.Firmware.Version, v => myAPI.Firmware.Version = v, 24);
上一篇:JavaScript 中的延迟加载属性模式


下一篇:Java面向对象之静态属性静态方法、访问权限、getter与setter