Как только добавляется в код Code.NotNull, то ReSharper перестает считать, что элементы не null
static void f([CanBeNull][ItemNotNull] List<object> l)
{
if(f==null) throw new Exception();
var o = l[0].ToString(); // Нет проблем, элементы не null
}
static void g([CanBeNull][ItemNotNull] List<object> l)
{
Code.NotNull(l,"a");
var o = l[0].ToString(); // А теперь: Possible NullReferenceException
}
Как вариант можно решить через [ContractAnnotation("arg:null => halt")], но я не очень в этом силён и буду рад услышать улучшения.
До:
[DebuggerHidden, MethodImpl(AggressiveInlining)]
[AssertionMethod]
public static void NotNull<T>(
[CanBeNull, NoEnumeration, AssertionCondition(AssertionConditionType.IS_NOT_NULL)] T arg,
[NotNull, InvokerParameterName] string argName) where T : class
{
if (arg == null)
throw CodeExceptions.ArgumentNull(argName);
}
После:
[DebuggerHidden, MethodImpl(AggressiveInlining)]
[AssertionMethod]
[ContractAnnotation("arg:null => halt")]
public static void NotNull<T>(
[CanBeNull, NoEnumeration] T arg,
[NotNull, InvokerParameterName] string argName) where T : class
{
if (arg == null)
throw CodeExceptions.ArgumentNull(argName);
}
Здравствуйте, _NN_, Вы писали:
_NN>Как только добавляется в код Code.NotNull, то ReSharper перестает считать, что элементы не null
На Resharper 2018.2.3 + текущий CJ всё ок.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, _NN_, Вы писали:
_NN>>Как только добавляется в код Code.NotNull, то ReSharper перестает считать, что элементы не null
S>На Resharper 2018.2.3 + текущий CJ всё ок.
S>Image: fineforme.png
Видимо проблема 2018.3.
Здравствуйте, _NN_, Вы писали:
_NN>Видимо проблема 2018.3.
Обрадуй товарищей в профильном форуме, плиз
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, _NN_, Вы писали:
_NN>>Видимо проблема 2018.3.
S>
S>Обрадуй товарищей в профильном форуме, плиз
Я открываю баги в youtrack. Если в форуме открывать буду, забью всю ленту