将新创建的对象设置为等于重载构造函数中的另一个实例

时间:2015-10-28 13:25:45

标签: c# asp.net-mvc constructor overloading automapper

我可以在类的构造函数中将新创建的对象设置为等于提供的对象吗?

我想做这样的事情:

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;}

}

我不想按财产做财产。我是否必须使用类似单例的过程在GetInstance()方法中返回复制的实例。因为构造函数没有返回参数。我只是想知道这是否可行。

4 个答案:

答案 0 :(得分:1)

您将无法执行此操作,因为无法设置this。但是您已经在使用AutoMapper从您的DTO创建对象。如果你想要一个简写,你可以使用静态方法。

public MyClass
{
    public static MyClass FromDto(MyClassDto myClassDto)
    {
        return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
    }

    //Properties
}

然后你只需将它与

一起使用
var myClass = MyClass.FromDto(myClassDto);

答案 1 :(得分:1)

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与自动映射和MyClassDTO耦合。将MyClassDTO转换为MyClass到单独的类的责任可能会更好。

答案 2 :(得分:1)

你实际上是在谈论创建一个工厂,如果你看工厂模式,那么关键是一个静态类,它可以实现新的&#34;事物&#34;。所以,不,你不能像你一样尝试这样做,但如果你想封装AutoMapper逻辑,那么你可以简单地做一些事情:

public static class MyClassFactory
{
    public static MyClass FromMyClassDto(MyClassDto myClassDto)
    {
        return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
    }
}

然后:

var myClassInstance = MyClassFactory.FromMyClassDto(myClassDto);

答案 3 :(得分:0)

您无法在班级中为function initTypeAhead(){ var typeAheadField = getCategoryField(); // some field on the form typeAheadField.parent().append('<div id="typeAheadEl"><div id="category-lookup" class="custom-typeahead" category-lookup></div></div>'); // manual bootstrapping the angular angular.bootstrap($('#typeAheadEl'), ['typeAheadApp']); } angular.element(document).ready(function() { initTypeAhead(); }); 分配值。您需要复制值。