请问关于c的具体应用场景有哪些?

2026-04-29 02:502阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计427个文字,预计阅读时间需要2分钟。

请问关于c的具体应用场景有哪些?

在构建过程中出现错误,提示无法隐式转换类型。具体错误信息如下:

+ Error 12: Cannot implicitly convert type 'System.Collections.Generic.IEnumerator' to 'System.Collections.Generic.IEnumerator. An explicit conversion exists (are you missing a cast?)

我的构建中出现错误,其中说:

Error 12 Cannot implicitly convert
type
‘System.Collections.Generic.IEnumerator< BaseClass>’
to
‘System.Collections.Generic.IEnumerator< IParentClass>’.
An explicit conversion exists (are you
missing a cast?)

简单地把它扔掉是不对的?

这是我的代码:

public Dictionary<Int32, BaseClass> Map { get; private set; } public IEnumerator<BaseClass> GetEnumerator() { return this.Map.Values.GetEnumerator(); } public IEnumerator<IParentClass> IEnumerable<IParentClass>.GetEnumerator() { return this.GetEnumerator(); // ERROR! }

我的问题是,我可以改变这一行:

return this.GetEnumerator();

至:

请问关于c的具体应用场景有哪些?

return (IEnumerator<IParentClass>)this.GetEnumerator();

(没有任何不良副作用)?

一般承认的答案:
我已将功能更改为以下内容(阅读Jon Skeet的帖子后):

IEnumerator<IParentClass> IEnumerable<IParentClass>.GetEnumerator() { return this.Map.Values.Cast<IParentClass>().GetEnumerator(); } 不,你不能,因为仿制品目前在C#中并不协变. .NET本身有一些支持(对于委托和接口),但它尚未真正使用.

如果你要返回IEnumerable< BaseClass>而不是IEnumerator< BaseClass> (并假设.NEt 3.5)您可以使用Enumerable.Cast – 但您目前需要编写自己的扩展方法,例如

public static IEnumerator<TParent> Upcast<TParent, TChild> (this IEnumerator<TChild> source) where TChild : TParent { while (source.MoveNext()) { yield return source.Current; } }

或者在您的情况下,您可以使用之前的Cast:

return this.Map.Values.Cast<BaseClass>().GetEnumerator();

本文共计427个文字,预计阅读时间需要2分钟。

请问关于c的具体应用场景有哪些?

在构建过程中出现错误,提示无法隐式转换类型。具体错误信息如下:

+ Error 12: Cannot implicitly convert type 'System.Collections.Generic.IEnumerator' to 'System.Collections.Generic.IEnumerator. An explicit conversion exists (are you missing a cast?)

我的构建中出现错误,其中说:

Error 12 Cannot implicitly convert
type
‘System.Collections.Generic.IEnumerator< BaseClass>’
to
‘System.Collections.Generic.IEnumerator< IParentClass>’.
An explicit conversion exists (are you
missing a cast?)

简单地把它扔掉是不对的?

这是我的代码:

public Dictionary<Int32, BaseClass> Map { get; private set; } public IEnumerator<BaseClass> GetEnumerator() { return this.Map.Values.GetEnumerator(); } public IEnumerator<IParentClass> IEnumerable<IParentClass>.GetEnumerator() { return this.GetEnumerator(); // ERROR! }

我的问题是,我可以改变这一行:

return this.GetEnumerator();

至:

请问关于c的具体应用场景有哪些?

return (IEnumerator<IParentClass>)this.GetEnumerator();

(没有任何不良副作用)?

一般承认的答案:
我已将功能更改为以下内容(阅读Jon Skeet的帖子后):

IEnumerator<IParentClass> IEnumerable<IParentClass>.GetEnumerator() { return this.Map.Values.Cast<IParentClass>().GetEnumerator(); } 不,你不能,因为仿制品目前在C#中并不协变. .NET本身有一些支持(对于委托和接口),但它尚未真正使用.

如果你要返回IEnumerable< BaseClass>而不是IEnumerator< BaseClass> (并假设.NEt 3.5)您可以使用Enumerable.Cast – 但您目前需要编写自己的扩展方法,例如

public static IEnumerator<TParent> Upcast<TParent, TChild> (this IEnumerator<TChild> source) where TChild : TParent { while (source.MoveNext()) { yield return source.Current; } }

或者在您的情况下,您可以使用之前的Cast:

return this.Map.Values.Cast<BaseClass>().GetEnumerator();