我有这个非常简单的c#语句
var list = new int[4];
var query1 = from element in list
where element.Length > 10
select element;
由于某种原因,它不允许我使用int数组的Length属性并抛出以下异常:
'int' does not contain a definition for 'Length' and no extension method
'Length' accepting a first argument of type 'int' could be found (press F4
to add a using directive or assembly reference)
我无法想象发生了什么。如果我写下以下内容:
var query1 = from element in list.Length
where element > 10
select element;
然后它有效。
答案 0 :(得分:2)
from element
表示linq将循环遍历列表中的所有int
,并且每个int
都来自于被调用元素。
将其视为foreach循环。你现在写了这样的东西:
foreach(int element in list)
{
if(element.Length > 10) // an int doesn't have a Length property
{
yield return element;
}
}
我不确定你要用length属性实现什么,但这就是你写的。你能用长度属性描述你想要评估的内容吗?
答案 1 :(得分:1)
当您撰写from element in list
时,您说要对list
的每个元素进行枚举,因此element
的类型为int
。 Length
类型上没有int
属性存在。因此错误。
当您编写from element in list.Length
时,您希望枚举单个项目,该项目是数组的长度,该项目的类型为int
。
答案 2 :(得分:1)
element
是从数组int
检索到的list
。这不是数组本身。
由于int
没有Length
属性,因此无效。如果您要查找整数的位数,请查看此处:How can I get a count of the total number of digits in a number?。
最终结果将是:
var list = new int[4];
var query1 = from element in list
where (element == 0 ? 1 : Math.Floor(Math.Log10(Math.Abs(element)) + 1)) > 10
select element;
答案 3 :(得分:1)
问题在于您的查询:
var list = new int[4];
var query1 = from element in list
where element.Length > 10
select element;
此处element
是数组integer
中的个人list
,而不是int[]
。很明显,Length
类型不存在int
。
答案 4 :(得分:1)
编译器是对的:int
没有Length
属性(list
是int
s的数组)。您是指int
的字符串表示吗?
var list = new int[4];
...
var query = list
.Where(element => element.ToString().Length > 10) // note "ToString()"
.Select(element);
请注意,该查询可能会返回an empty enumerable
:大多数文化中int
的最长字符串表示形式是-2147483648
,其中正好是10位。如果你想要计数数字(例如-123
有三位数)
您可以稍微修改一下查询:
var query = list
.Where(element => element
.ToString(CultureInfo.InvariantCulture)
.Trim('-')
.Length > 10)
.Select(element);
在这种情况下,你肯定有一个空结果。
答案 5 :(得分:0)
您的代码与此类似:
var list = new int[4];
var filteredElements = new List<int>();
foreach (int element in list)
{
if(element.Length > 10)
{
filteredElements.Add(element);
}
}
这就是为什么你会收到错误&#39; int&#39;不包含&#39;长度&#39;的定义没有扩展方法