将新创建的对象设置为等于重载构造函数中的另一个实例
Set newly created object equal to another instance in overloaded constructor
我可以在 class 的构造函数中将新创建的对象设置为等于提供的对象吗?
我想做这样的事情:
public MyClass
{
public MyClass(MyClassDto myClassDto)
{
MyClass convertedMyClassObj = AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
//Assign the new object being created here equal to convertedMyClassObj:
this = convertedMyClassObj; //I want to reference the current object in place of 'this'.
}
public int MyProperty1 { get; set;}
public int MyProperty2 { get; set;}
public int MyProperty3 { get; set;}
}
我不想 属性 属性。我是否必须使用类似单例的过程来 return GetInstance() 方法中的复制实例。因为构造函数没有 return 参数。我只想知道这是否可能。
您不能在 class 中为 this
赋值。您需要复制这些值。
您将无法执行此操作,因为无法设置 this
。但是您已经在使用从 DTO 创建对象的 AutoMapper。如果你想要 shorthand.
,你可以只使用静态方法
public MyClass
{
public static MyClass FromDto(MyClassDto myClassDto)
{
return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
}
//Properties
}
那么您只需将它与
一起使用
var myClass = MyClass.FromDto(myClassDto);
AutoMapper.Map
的重载引用了现有的目标对象。
public static TDestination Map<TSource, TDestination>(TSource source, TDestination destination);
您可以将它与 this
一起使用,以根据 DTO 设置属性:
class MyClass
{
public MyClass(MyClassDTO dto)
{
AutoMapper.Mapper.Map(dto, this);
}
}
这种方法的问题在于 MyClass
与 Automapper 和 MyClassDTO
耦合。将 MyClassDTO
转换为 MyClass
的责任转移到单独的 class.
可能会更好
您实际上是在谈论创建一个工厂,如果您查看工厂模式,关键是一个静态 class,它完成实例化新 "thing" 的工作。所以,不,你不能像你想的那样真正做到这一点,但如果你想封装 AutoMapper 逻辑,那么你可以简单地做一些事情:
public static class MyClassFactory
{
public static MyClass FromMyClassDto(MyClassDto myClassDto)
{
return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
}
}
然后:
var myClassInstance = MyClassFactory.FromMyClassDto(myClassDto);
我可以在 class 的构造函数中将新创建的对象设置为等于提供的对象吗?
我想做这样的事情:
public MyClass
{
public MyClass(MyClassDto myClassDto)
{
MyClass convertedMyClassObj = AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
//Assign the new object being created here equal to convertedMyClassObj:
this = convertedMyClassObj; //I want to reference the current object in place of 'this'.
}
public int MyProperty1 { get; set;}
public int MyProperty2 { get; set;}
public int MyProperty3 { get; set;}
}
我不想 属性 属性。我是否必须使用类似单例的过程来 return GetInstance() 方法中的复制实例。因为构造函数没有 return 参数。我只想知道这是否可能。
您不能在 class 中为 this
赋值。您需要复制这些值。
您将无法执行此操作,因为无法设置 this
。但是您已经在使用从 DTO 创建对象的 AutoMapper。如果你想要 shorthand.
public MyClass
{
public static MyClass FromDto(MyClassDto myClassDto)
{
return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
}
//Properties
}
那么您只需将它与
一起使用var myClass = MyClass.FromDto(myClassDto);
AutoMapper.Map
的重载引用了现有的目标对象。
public static TDestination Map<TSource, TDestination>(TSource source, TDestination destination);
您可以将它与 this
一起使用,以根据 DTO 设置属性:
class MyClass
{
public MyClass(MyClassDTO dto)
{
AutoMapper.Mapper.Map(dto, this);
}
}
这种方法的问题在于 MyClass
与 Automapper 和 MyClassDTO
耦合。将 MyClassDTO
转换为 MyClass
的责任转移到单独的 class.
您实际上是在谈论创建一个工厂,如果您查看工厂模式,关键是一个静态 class,它完成实例化新 "thing" 的工作。所以,不,你不能像你想的那样真正做到这一点,但如果你想封装 AutoMapper 逻辑,那么你可以简单地做一些事情:
public static class MyClassFactory
{
public static MyClass FromMyClassDto(MyClassDto myClassDto)
{
return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
}
}
然后:
var myClassInstance = MyClassFactory.FromMyClassDto(myClassDto);