string[] arrStr = { "a", "b", "c" };
return arrStr.Count(p=>p==str);
使用上面代码时发现Count是调用Enumerable中方法,F12看了下strimg继承的几个接口中IEnumerable和Enumerable,最相似,但里面只有一个GetEnumerator的函数,然后就不知道到底和Enumerable怎么关联的了,想问下大哥们其中用到了那些技术,还有题目中的问题,都解答下吧,回答好了再加分.https://referencesource.microsoft.com/#mscorlib/system/string.cs,8281103e6f23cb5c
return arrStr.Count(p=>p==str);
使用上面代码时发现Count是调用Enumerable中方法,F12看了下strimg继承的几个接口中IEnumerable和Enumerable,最相似,但里面只有一个GetEnumerator的函数,然后就不知道到底和Enumerable怎么关联的了,想问下大哥们其中用到了那些技术,还有题目中的问题,都解答下吧,回答好了再加分.https://referencesource.microsoft.com/#mscorlib/system/string.cs,8281103e6f23cb5c
public staticc class StringEx
{
public int (this string @string,Exp 表达式)
{ }
}
看了一些2楼的解答,了解了System.Linq的一些东西,
https://www.cnblogs.com/YeYunRong/p/5212201.html
如上面连接文章中所说,数组可已说既是一个枚举数(Enumerator)也是一个可枚举类型(Enumerable)
我的疑惑是数组类型是怎么调用Enumerable中的成员方法的,虽说继承是可以实现这些的,但没找到
2.https://www.php.cn/csharp-article-357797.html
这里的
IEnumerator IEnumerable.GetEnumerator() { foreach (T t in dataList) { yield return t; }
返回T类型转为基类形,有什么作用(完整代码在下面)
public class PhonePackage<T> : IEnumerable<T> { private List<T> dataList = null; public void Add(T t) { if (dataList == null) dataList = new List<T>(); dataList.Add(t); } public IEnumerator<T> GetEnumerator() { foreach (T t in dataList) { yield return t; } } IEnumerator IEnumerable.GetEnumerator() { foreach (T t in dataList) { yield return t; } } }
{ }他能进这个if判定了,结果是进了。ok,你还纠结啥。string[] is IEnumerable<string> 断言是真。 至于为啥,因为他实现了 IList<T>
至于你后面问的,同样不需要纠结。现在正在大学招生。好了foreach (考生 t in 达到标准的考生列表)
{
}你问我为啥要转考生,没有为啥。我是招生办的,我只关心考生,不关心你姓什么,叫什么,那个地区的
ps:纠结那些东西没啥用,底下是给机器看的,从纠结机器看的东西,忘了人的想法,你追求的是什么?我追求的是“用计算机解决人类的问题”,你想追求什么“我要把自己思维变成机器思维”
首先,泛型和非泛型,不一样。
我们先看一下 List。它同时需要实现IEnumerable和IEnumerable<T>我们在仔细看一下IEnumerable<T>,发现它也要继承自IEnumerable
所以结论其实很简单,IEnumerable<T>和IEnumerable就是两个类,不一样。
然后我们稍微说一下,为什么List需要实现IEnumerable<T>和IEnumerable,但是IEnumerable<T>本来就需要实现IEnumerable,这样是重复的。
这个问题,看过蛮多答案的。后来感觉可能由于微软为了方便代码阅读吧。2 返回T类型转为基类形,有什么作用
你要看一下是yield return t;
这个关键字,你自己百度一下就明白了。
并不是返回了单独的T
首先,泛型和非泛型,不一样。
我们先看一下 List。它同时需要实现IEnumerable和IEnumerable<T>我们在仔细看一下IEnumerable<T>,发现它也要继承自IEnumerable
所以结论其实很简单,IEnumerable<T>和IEnumerable就是两个类,不一样。
然后我们稍微说一下,为什么List需要实现IEnumerable<T>和IEnumerable,但是IEnumerable<T>本来就需要实现IEnumerable,这样是重复的。
这个问题,看过蛮多答案的。后来感觉可能由于微软为了方便代码阅读吧。2 返回T类型转为基类形,有什么作用
你要看一下是yield return t;
这个关键字,你自己百度一下就明白了。
并不是返回了单独的T
那linq扩展了IEnumerable<T>,但肯定有一个class继承了IEnumerable<T>才行,然后发现
string[] arrStr = { "a", "b", "c" };
然后这个的数组Array类型,
,没发现有继承IEnumerable<T>接口的,这就是疑问的地方
首先,泛型和非泛型,不一样。
我们先看一下 List。它同时需要实现IEnumerable和IEnumerable<T>我们在仔细看一下IEnumerable<T>,发现它也要继承自IEnumerable
所以结论其实很简单,IEnumerable<T>和IEnumerable就是两个类,不一样。
然后我们稍微说一下,为什么List需要实现IEnumerable<T>和IEnumerable,但是IEnumerable<T>本来就需要实现IEnumerable,这样是重复的。
这个问题,看过蛮多答案的。后来感觉可能由于微软为了方便代码阅读吧。2 返回T类型转为基类形,有什么作用
你要看一下是yield return t;
这个关键字,你自己百度一下就明白了。
并不是返回了单独的T
问题就是 string[] arrStr 数组类型没看到继承IEnumerable<T>,即使IEnumerable<T>接口再扩展又有什么用
f12看到的array类的定义是没有IEnumerable<T>的继承,请问数组类型是怎么和IEnumerable<T>关联的
public interface IList<T> : System.Collections.Generic.ICollection<T>, System.Collections.Generic.IEnumerable<T>
所以数组也就继承了IEnumerable<T>, 是吗?
System.Linq.Enumerable类,提供了数十种称为扩展方法的共享方法,帮助您操作所有实现IEnumerable(of T)接口的类中的数据。由于Enumerable类的扩展方法可以处理许多其他类如(包括Array和List),因此不仅可以使用Enumerable类的方法来创建LINQ查询,还可以用它来操作数组和其他数据结构的行为。
https://www.cnblogs.com/RealAlex/p/3182820.html
https://stackoverflow.com/questions/33117732/ienumerable-count-or-tolist-count
方法也是可以有泛型的。
而且 array是数组的基类,string[]是一个派生类。
string拥有更多的扩展
泛型其实就是为了减少代码的重复性而出现的。泛型使得你定义一个其他类型数组也能调用count()方法。
你的回答我明白.
现在问题,是string[]类型中没发现有继承了IEnumerable<T>接口的语句,然而他却能调用linq扩展IEnumerable<T>接口的方法,为什么?
你自己贴的public abstract class Array请问abstract 何意啊。纠结,纠结。你纠结这些有啥用
很明显我没继承myclass没有继承array,这表明是编译器给你做的,这就是典型的人是人,机器是机器。编辑器编译给机器看的,他告诉机器他继承了array,同时他编译的同时把Ilist<T>以前实现了,但是人根本别纠结,他本来就不是给你看的,他就是一个迫不得已的给机器看的玩意。所以还是那句话,这么学法不对。就像最早的英语教学一样,“主谓宾定状补,啥完成时,过去时”你从初中学到大学毕业,近10年时间,都都赶不上一个桂林卖小吃的老太太,所以不是你不努力,而是方法错误。
string[]在c++/cli里其实是Array<String^> ^
也就是说.net里是有泛型数组这个类型,但是通过语法糖隐藏起来了
int[] 其实就是Array<int>,这个是实现了IEnumerable<int>的
string[] arrStr = { "a", "b", "c" };
然后这个的数组Array类型,
问题中 count明明扩展的是IEnumerable<T>这个接口,而string[] 这个类型是 看不到,找不到 哪里有继承这样的接口的
你说说看 一个类型没有继承一个接口,居然能调用这个接口中的方法,这是什么了??
我想知道在哪里实现的,难道是被隐藏了?