Any()不能在Portable Class Libraries中编译;有替代品吗?

时间:2016-04-14 21:34:09

标签: c# .net portable-class-library

如何将以下语句移植到PCL?

# app/models/component.rb
class Component < ActiveRecord::Base
  ...
  validates :size_id, uniqueness: { scope: :ingredient_id } 
  ...
end

# app/db/migrate/20160412134948_add_uniqueness_index_to_components_table.rb
class AddUniquenessIndexToComponentsTable
  def change
    add_index :components, [:size_id, :ingredient_id], unique: true, name: 'components_uniqueness_validation'
  end
end

上面的代码无法编译,我总是收到以下错误消息:

using System.Linq;

string value = ...;

if (value.Any(ch => ch > Byte.MaxValue)) {
    throw new ArgumentException("String contains non-ASCII characters.", "value");
}

1 个答案:

答案 0 :(得分:4)

看起来像string.GetEnumerator() is not supported in the PCL。因此,IEnumerable<char>的隐式实现也不是。

您可以通过

轻松获取 支持linq的字符数组
if (value.ToCharArray().Any(ch => ch > Byte.MaxValue)) {
    throw new ArgumentException("String contains non-ASCII characters.", "value");
}

我会注意到,如果做了很多事情,可能会出现创建无关数组的性能问题。如果您可以测量由此导致的性能问题,则可以使用较低级别的方法:

for(int i=0; i < value.Length; i++)
{
     char ch = value[i];
     if (ch > Byte.MaxValue))
     {
         throw new ArgumentException("String contains non-ASCII characters.", "value");
     }
}