C# 映射相同对象时ValueInjector中的System.ArgumentException

C# 映射相同对象时ValueInjector中的System.ArgumentException,c#,valueinjecter,C#,Valueinjecter,我有一门课: public class LotInfo { public string lotn { get; set; } public string imlitm { get; set; } public string imdsc { get; set; } public string wplotn { get; set; } public int wptrdj { get; set; }

我有一门课:

public class LotInfo
    {
        public string lotn { get; set; }
        public string imlitm { get; set; }
        public string imdsc { get; set; }
        public string wplotn { get; set; }
        public int wptrdj { get; set; }
        public DateTime wptrdj_d { get; set; }
        public string wplitm { get; set; }
        public int wptrqt { get; set; }
        public string wpkyfn { get; set; }
        public int wpdoco { get; set; }
        public string iolitm { get; set; }
        public string iodcto { get; set; }
        public int iodoco { get; set; }
        public int ioub04 { get; set; }
    }
我有两个例子

对象1和对象2

我想为特定属性注入object2->object1

因此,我重写了Match方法,如下所示:

public class LotInfoInject : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.SourceProp.Name.StartsWith("io");
        }

    }
public class LotInfoInject : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name.StartsWith("io")
            && c.SourceProp.Name == c.TargetProp.Name;
    }

}
我使用的注射剂如下:

public class LotInfoInject : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.SourceProp.Name.StartsWith("io");
        }

    }
public class LotInfoInject : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name.StartsWith("io")
            && c.SourceProp.Name == c.TargetProp.Name;
    }

}
object1.InjectFrom(object2)

我不明白为什么我会得到这个例外

{“System.String”类型的对象无法转换为类型 “System.Int32”。”}

如果我不重写Match方法,它会工作,但我得到的属性是我不想从object1中替换的


有什么想法吗?

您正在尝试将iolitm(字符串)放在iodoco(int)中

试着这样做:

public class LotInfoInject : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.SourceProp.Name.StartsWith("io");
        }

    }
public class LotInfoInject : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name.StartsWith("io")
            && c.SourceProp.Name == c.TargetProp.Name;
    }

}

您试图将iolitm(字符串)放入iodoco(int)中

试着这样做:

public class LotInfoInject : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.SourceProp.Name.StartsWith("io");
        }

    }
public class LotInfoInject : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name.StartsWith("io")
            && c.SourceProp.Name == c.TargetProp.Name;
    }

}

您试图将iolitm(字符串)放入iodoco(int)中

试着这样做:

public class LotInfoInject : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.SourceProp.Name.StartsWith("io");
        }

    }
public class LotInfoInject : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name.StartsWith("io")
            && c.SourceProp.Name == c.TargetProp.Name;
    }

}

您试图将iolitm(字符串)放入iodoco(int)中

试着这样做:

public class LotInfoInject : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.SourceProp.Name.StartsWith("io");
        }

    }
public class LotInfoInject : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name.StartsWith("io")
            && c.SourceProp.Name == c.TargetProp.Name;
    }

}

除了指定源应以io开头外,还应指定目标属性应等于源属性Y,如果要从字符串变为Int,还可以重写SetValue除了指定源应以io开头外,还应指定目标属性应等于源属性Y如果要从字符串转到Int,还可以重写SetValue。除了指定源应以io开头外,还应指定目标属性应等于源属性。如果要从字符串转到Int,还可以重写SetValue。除了指定源应以io开头,还应指定该目标属性应等于源属性。如果要从字符串变为int,还可以重写SetValue