У меня есть следующий код:
public void F(string x)
{
Contract.Requires(!string.IsNullOrWhiteSpace(x));
throw new NotImplementedException();
}
При компиляции я получаю следующее предупреждение:
предупреждение CC1036: обнаруженный вызов метода 'System.String.IsNullOrWhiteSpace(System.String)' без [Pure] в контрактах метода [...]
Как с этим бороться?
Что странно, я также использую string.IsNullOrEmpty
, который не помечен как [Pure]
, а также в других контрактах, и у переписывающего устройства нет проблем с этим.
Моя версия для перезапуска моего контракта - 1.9.10714.2.
Это важная часть из реализации класса String
, который я использую (из метаданных):
#region Assembly mscorlib.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll
#endregion
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
namespace System
{
// Summary:
// Represents text as a series of Unicode characters.To browse the .NET Framework
// source code for this type, see the Reference Source.
[Serializable]
[ComVisible(true)]
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable, IComparable<string>, IEnumerable<char>, IEquatable<string>
{
// [...]
//
// Summary:
// [...]
public static bool IsNullOrEmpty(string value);
//
// Summary:
// [...]
public static bool IsNullOrWhiteSpace(string value);
Почему атрибут [Pure]
отсутствует?