所以我试图使用完全相同的类型将实体转换为DTO。两种类型(类)完全相同,除非它们位于不同的名称空间中。
当我引用其他名称空间中的任何一个时,我是否需要转换它们?
或者VS应该自动知道并识别它们在不同的文件中是完全相同的吗?
由于
答案 0 :(得分:1)
namespace SomeInternetShoppingSite
{
public class Client
{
public int Id { get; }
public sprint FirstName { get; }
...
}
}
namespace SomeOnlineBankingSite
{
public class Client
{
public int Id { get; }
public sprint FirstName { get; }
...
}
}
你真的认为以下内容应该是合法的吗?
var bankClient = new SomeOnlineBankingSite.Client(...);
var shoppingClient = (SomeInternetShoppingSite.Client)bankClient;
尽管两个类都是相同的,但它们是两个完全不同的两个截然不同的概念。即使编译器可以很容易地确定类型定义是相同的,它也无权允许两者之间的显式或隐式转换;只有类的作者有权允许进行转换,如果他们愿意,实现强制转换操作符,静态工厂方法或者你有什么。
答案 1 :(得分:1)
基本上你所描述的是duck typing。最接近的C#等价物是“动态”关键字,但我不认为这正是你所要求的。
正如其他人所指出的那样,C#确实不,一般来说,遵循你所描述的打字模型,你可能不会想要它。正如InBetween的例子所示,“同名”,“相同界面”和“相同意味着”之间存在很大差异。
为了更直接地回答这个问题,首先,我认真地质疑在不同的命名空间中使用两个相同类的智慧 - 这似乎是对Don't Repeat Yourself主体的明显违反。话虽如此,如果在它们之间定义一个隐式转换,应该允许你或多或少地交替使用它们(虽然它的缺点是它可能会混淆你所指的两个对象中的哪一个;我倾向于说根据这个事实,这是一个不好的做法。