.Net 尝试分配时出现转换错误 CS0029 和 CS0266 class
.Net Conversion error CS0029 and CS0266 when trying to assign class
这个问题是我儿子提出来的,我无法准确回答。
当 converting/mapping 2 个相同的 classes 但在不同的命名空间中时,我们会收到错误消息。
我创建了 1 个 class Astronaut 并将 class 放在 2 个不同的命名空间中。
当您尝试分配 c = a 时出现此错误?
这是一个非常基本的示例,真正的问题发生在 2 classes 内部有多个 classes 并且为其编写映射器会很复杂。
郑重声明,我使用 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;
}
但我认为这不是正确的方法。无论任务如何,宇航员都是宇航员。所以你应该定义一个 Astronaut class 和一个 Mission class 来定义任务和执行任务的人。
顺便说一下,您并不是要“分配 class”。您正在尝试将一个 class 的实例分配给另一个实例。区分 classes 和 instances 非常重要。
这个问题是我儿子提出来的,我无法准确回答。
当 converting/mapping 2 个相同的 classes 但在不同的命名空间中时,我们会收到错误消息。 我创建了 1 个 class Astronaut 并将 class 放在 2 个不同的命名空间中。
当您尝试分配 c = a 时出现此错误? 这是一个非常基本的示例,真正的问题发生在 2 classes 内部有多个 classes 并且为其编写映射器会很复杂。
郑重声明,我使用 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;
}
但我认为这不是正确的方法。无论任务如何,宇航员都是宇航员。所以你应该定义一个 Astronaut class 和一个 Mission class 来定义任务和执行任务的人。 顺便说一下,您并不是要“分配 class”。您正在尝试将一个 class 的实例分配给另一个实例。区分 classes 和 instances 非常重要。