我正在尝试使用具有显式(但也因隐式失败)强制转换运算符的类,该运算符在使用 LINQCast<T>()
函数时失败。这是两个类的定义
public class DatabaseInfoElement : ConfigurationElement
{
[ConfigurationProperty("AllowedServer", IsRequired = true)]
public string AllowedServer { get { return (string)base["AllowedServer"]; } }
[ConfigurationProperty("DatabaseName", IsRequired = true)]
public string DatabaseName { get { return (string)base["DatabaseName"]; } }
[ConfigurationProperty("SqlInstance", IsRequired = true)]
public string SqlInstance { get { return (string)base["SqlInstance"]; } }
public static explicit operator DatabaseInfo(DatabaseInfoElement element)
{
return new DatabaseInfo(element.AllowedServer, element.DatabaseName, element.SqlInstance);
}
}
public class DatabaseInfo
{
public DatabaseInfo(string allowedServer, string sqlInstance, string databaseName)
{
AllowedServer = allowedServer;
SqlInstance = sqlInstance;
DatabaseName = databaseName;
}
public string AllowedServer { get; set; }
public string SqlInstance { get; set; }
public string DatabaseName { get; set; }
}
这是我用来测试它的代码。
//Gets the ConfigurationSection that contains the collection "Databases"
var section = DatabaseInfoConfig.GetSection();
//This line works perfectly.
DatabaseInfo test = (DatabaseInfo)section.Databases[0];
//This line throws a execption
var test2 = new List<DatabaseInfo>(section.Databases.Cast<DatabaseInfo>());
这是我得到的例外
System.InvalidCastException 未被用户代码处理 H结果=-2147467262 消息=无法将“Server.Config.DatabaseInfoElement”类型的对象转换为“Server.DatabaseInfo”类型。 源=System.Core 堆栈跟踪: 在 System.Linq.Enumerable.d__b1`1.MoveNext() 在 System.Collections.Generic.List`1..ctor(IEnumerable`1 集合) 在 E:\Code\Sandbox\Program.cs:line 82 中的 Sandbox.Main() 内部异常:
我在选角时做错了什么以使其按我想要的方式工作?