ReSharper有一套代码注释,可用于显式表达IDE可以使用的代码意图。两个最有用的注释是/*Function to left rotate arr[] of siz n by d*/
void leftRotate(int arr[], int d, int n)
{
int i, j, k, temp;
for (i = 0; i < gcd(d, n); i++)
{
/* move i-th values of blocks */
temp = arr[i];
j = i;
while(1)
{
k = j + d;
if (k >= n)
k = k - n;
if (k == i)
break;
arr[j] = arr[k];
j = k;
}
arr[j] = temp;
}
}
和[CanBeNull]
属性,可以在构造函数,属性和方法上使用,如下所示:
[NotNull]
这是一个很长的镜头,但有没有办法可以将这些属性分配给Action或Func参数?
我理解以下代码是非法的(因为type arguments are not a valid target for attributes),但有没有另外一种表达方式?
[CanBeNull]
private Foo DoSomething([NotNull] string text)
{
// ...
}
答案 0 :(得分:4)
如果您愿意创建自定义委托类型,则可以执行此操作:
delegate void TextProcessor([NotNull] string text);
delegate void NullableTextProcessor([CanBeNull] string text);
private void DoSomething([NotNull] TextProcessor processText)
{
// ...
}
private void DoSomethingNull([NotNull] NullableTextProcessor processText)
{
// ...
}
不幸的是,CanBeNull似乎没有用lambda语法发出警告:
但您可能只想等待C#8的可空/不可空引用类型。