gpt4 book ai didi

c# - 如何不重复代码契约(Contract)检查?

转载 作者:行者123 更新时间:2023-11-30 15:30:09 25 4
gpt4 key购买 nike

我有一个静态类,其中包含具有相同签名的方法。

static class SomeClass
{
static void SomeMethod(int param)
{
Contract.Requires<ArgumentException>(param != 0);
// some code
}

static void SomeMethod2(int param)
{
Contract.Requires<ArgumentException>(param != 0);
// some code
}
}

有什么方法可以不在这个方法中重复 CodeContract 检查吗?

最佳答案

您可以使用契约(Contract)缩写。但就我个人而言,我不会为这种简单的检查而这样做。这是我们使用的缩写词的示例:

public static class ContractEx
{
[ContractAbbreviator]
public static void StringNullOrEmpty(string s, string parameterName)
{
Contract.Requires<ArgumentNullException>(s != null, parameterName);
Contract.Requires<ArgumentException>(s.Length != 0, parameterName);
Contract.Requires(!String.IsNullOrEmpty(s)); // required for static code analysis
}
}

用法:

void SomeMethod(string foo)
{
ContractEx.StringNullOrEmpty(foo, "foo");
}

请注意,这有一个明显的缺点,那就是必须自己指定参数名称。您可以省略它,但随后契约(Contract)重写器会发出一个异常,其中 s != null 作为失败的条件,这对于参数异常是没有意义的。

作为检查类状态的实例方法,缩写通常更有意义。例如(来自 MSDN ):

[ContractAbbreviator]
private void DataAndStateUnchanged()
{
Contract.Ensures(this.State == Contract.OldValue(this.State));
Contract.Ensures(this.Data == Contract.OldValue(this.Data));
}

关于c# - 如何不重复代码契约(Contract)检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com