C# 继承相关问题

C# 继承相关问题,c#,C#,我有一个班级基础。A和B延伸底座。还有一个类关系,它包含两个基本对象(源、目标)。是否可以确定源/目标是A实例还是B实例 谢谢 基督教徒 附言: 这里有一个小的附加组件。我正在使用automapper,我想将源/目标的类型映射到一个名为“type”的字符串-GetType不起作用(实际上它起作用-请参阅我的注释-也是很好的解决方案): Mapper.CreateMap<Item, ItemViewModel>() .ForMember(dest =&g

我有一个班级基础。A和B延伸底座。还有一个类关系,它包含两个基本对象(源、目标)。是否可以确定源/目标是A实例还是B实例

谢谢

基督教徒

附言:

这里有一个小的附加组件。我正在使用automapper,我想将源/目标的类型映射到一个名为“type”的字符串-GetType不起作用(实际上它起作用-请参阅我的注释-也是很好的解决方案)

Mapper.CreateMap<Item, ItemViewModel>()
                .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.ItemName == null ? "" : src.ItemName.Name))
                .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.GetType().ToString()));
Mapper.CreateMap()
.FormMember(dest=>dest.Name,opt=>opt.MapFrom(src=>src.ItemName==null?“:src.ItemName.Name))
.ForMember(dest=>dest.Type,opt=>opt.MapFrom(src=>src.GetType().ToString());
在这种情况下如何使用is/as?

是的:

if (source is A)

if (source is B)

或:

有关更多指导,请参阅,还有很多其他类似的指导。

是的:

if (source is A)

if (source is B)

或:

有关更多指导,请参阅,还有很多其他类似的指导。

是的

如果(来源是B).


if(源是B).

使用
is
运算符:)

使用
is
运算符:)

+1你赢了我,你有这些答案吗?:)加尔…你今天早上太快了(好吧,至少对我来说是早上)。@Richard:更好的是,如果你在这里呆了这么长时间,很明显Jon实际上是一个时间旅行者…而且他打字真的很快。这是一种代码气味吗?“有没有办法完全避免这个问题?”克里斯,也许认为它有一种可检测的气味,而不是一种强烈的气味。通过测试类型解决的问题通常通过继承(将某些内容放入基中,并在A和B中重写)、重写(将As和B作为这样处理,而不是通过它们的基处理,因此在传递给同一方法名时具有不同的行为)或泛型来更好地解决(虽然注意到C类泛型不允许C++中的某些专业化,但在某些情况下,它是很方便的。)检测类型确实有它的位置。+ 1你把我打败了,你有没有答案缓存或什么?……加尔……你今天早上太快了(对我来说至少早上)。李察:更好,很明显,如果你在这里逗留了很长时间,那么Jon实际上是一个时间旅行者……而且他打字非常快。这是一种代码气味吗?“有没有办法完全避免这个问题?”克里斯,也许认为它有一种可检测的气味,而不是一种强烈的气味。通过测试类型解决的问题通常通过继承(将某些内容放入基中,并在A和B中重写)、重写(将As和B作为这样处理,而不是通过它们的基处理,因此在传递给同一方法名时具有不同的行为)或泛型来更好地解决(尽管注意到C类泛型不允许C++中的相同类型的专业化,在某些情况下是很方便的)。但是检测类型确实有它的位置。谢谢我玩过GetType,但这不起作用。哎呀,我写的GetType东西实际上起作用了-前端有一个错误。不过我会接受Jon Skeet的回答…谢谢我玩过GetType,但这不起作用。哎呀,我写的GetType东西实际上起作用了-这里是w作为前端的一个错误,我会接受Jon Skeet的回答。。。。