![](/img/trans.png)
[英]CS0029 Compile Error - implicit conversion when outputting a integer to a text box
[英].Net Conversion error CS0029 and CS0266 when trying to assign class
这个问题是我儿子提出来的,我无法给出准确的答案。
当转换/映射 2 个相同的类但在不同的命名空间中时,我们得到一个错误。 我创建了 1 个 class 宇航员并将 class 放在 2 个不同的命名空间中。
当您尝试分配 c = a 我们得到这个错误? 这是一个非常基本的示例,真正的问题发生在 2 个内部有多个类的类中,并且为其编写映射器会很复杂。
作为记录,我使用 Automapper 修复了这个问题,只是想知道这不起作用的实际原因。
using Apollo;
using Challenger;
void Main()
{
var a = new Apollo.Astronaut();
var b = new Challenger.Astronaut();
// Cannot implicitely convert type 'Challenger.Astronaut' to 'Apollo.Astronaut'
var c = a;
c = b;
}
namespace Apollo{
public class Astronaut
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
namespace Challenger{
public class Astronaut
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
如果您需要两种不同的 Astronaut 类型,您需要定义一个基本 class 或创建一个它们都实现的接口。
底座 class:
namespace Space
{
public class Astronaut
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
namespace Apollo
{
public class Astronaut : Space.Astronaut
{
}
}
namespace Challenger
{
public class Astronaut : Space.Astronaut
{
}
}
void Main()
{
Space.Astronaut a = new Apollo.Astronaut();
Space.Astronaut b = new Challenger.Astronaut();
var c = a;
c = b;
}
界面
namespace Space
{
public interface IAstronaut
{
string FirstName { get; set; }
string LastName { get; set; }
}
}
namespace Apollo
{
public class Astronaut : Space.IAstronaut
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
namespace Challenger
{
public class Astronaut : Space.IAstronaut
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
void Main()
{
IAstronaut a = new Apollo.Astronaut();
IAstronaut b = new Challenger.Astronaut();
var c = a;
c = b;
}
但我认为这不是 go 的正确方法。 无论执行什么任务,宇航员都是宇航员。 所以你应该定义一个 Astronaut class 和一个 Mission class 定义一个任务和谁去。 顺便说一句,您不是在尝试“分配课程”。 您正在尝试将一个 class 的实例分配给另一个实例。 区分类和实例非常重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.