我几年来一直在使用C#和Unity3d,但我刚开始使用.NET编程.我收到错误:
无法隐式将类型' System.Collections.Generic.IEnumerable<URL>' 转换为' System.Collections.Generic.List<URL>'.存在显式转换(您是否错过了演员?)
这是我的代码:
namespace TestBrowserHistory
{
public class Test1
{
public Test1()
{
}
static void Main()
{
InternetExplorer myClass = new InternetExplorer();
List<URL> calledList = myClass.GetHistory();
Console.WriteLine("Hello!");
Console.WriteLine(calledList[1]);
Console.ReadLine();
}
}
}
public class InternetExplorer
{
// List of URL objects
public List<URL> URLs { get; set; }
public IEnumerable<URL> GetHistory()
{
// Initiate main object
UrlHistoryWrapperClass urlhistory = new UrlHistoryWrapperClass();
// Enumerate URLs in History
UrlHistoryWrapperClass.STATURLEnumerator enumerator =
urlhistory.GetEnumerator();
// Iterate through the enumeration
while (enumerator.MoveNext())
{
// Obtain URL and Title
string url = enumerator.Current.URL.Replace('\'', ' ');
// In the title, eliminate single quotes to avoid confusion
string title = string.IsNullOrEmpty(enumerator.Current.Title)
? enumerator.Current.Title.Replace('\'', ' ') : "";
// Create new entry
URL U = new URL(url, title, "Internet Explorer");
// Add entry to list
URLs.Add(U);
}
// Optional
enumerator.Reset();
// Clear URL History
urlhistory.ClearHistory();
return URLs;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
arc*_*hil 12
您得到该错误是因为myClass.GetHistory();返回IEnumerable<URL>与List<URL>编译时不同,尽管它实际上是List<URL>在运行时.更改方法签名返回List<URL>,导致您已经这样做了
public List<URL> GetHistory()
Run Code Online (Sandbox Code Playgroud)
其他解决方法是将方法调用结果转换为 List<URL>
List<URL> calledList = (List<URL>)myClass.GetHistory();
Run Code Online (Sandbox Code Playgroud)
或者从结果中构建新列表
List<URL> calledList = new List<URL>(myClass.GetHistory());
Run Code Online (Sandbox Code Playgroud)
如果您不需要List功能,则可以将其定义calledList为IEnumerable
var calledList = myClass.GetHistory();
Run Code Online (Sandbox Code Playgroud)