gpt4 book ai didi

c# - c#中的接口(interface)属性复制

转载 作者:可可西里 更新时间:2023-11-01 03:13:03 24 4
gpt4 key购买 nike

我已经使用 C# 多年了,但是遇到这个问题让我很困惑,我真的不知道怎么问这个问题,所以,举个例子吧!

public interface IAddress
{
string Address1 { get; set; }
string Address2 { get; set; }
string City { get; set; }
...
}

public class Home : IAddress
{
// IAddress members
}

public class Work : IAddress
{
// IAddress members
}

我的问题是,我想将 IAddress 属性的值从一个类复制到另一个类。这可能在一个简单的单行语句中实现,还是我仍然需要对每个属性进行属性到属性的分配?我真的很惊讶这个看似简单的事情却让我很困惑……如果不能以简洁的方式做到这一点,有没有人有他们用来做这类事情的捷径?

谢谢!

最佳答案

这是一种与接口(interface)无关的方法:

public static class ExtensionMethods
{
public static void CopyPropertiesTo<T>(this T source, T dest)
{
var plist = from prop in typeof(T).GetProperties() where prop.CanRead && prop.CanWrite select prop;

foreach (PropertyInfo prop in plist)
{
prop.SetValue(dest, prop.GetValue(source, null), null);
}
}
}

class Foo
{
public int Age { get; set; }
public float Weight { get; set; }
public string Name { get; set; }
public override string ToString()
{
return string.Format("Name {0}, Age {1}, Weight {2}", Name, Age, Weight);
}
}

static void Main(string[] args)
{
Foo a = new Foo();
a.Age = 10;
a.Weight = 20.3f;
a.Name = "Ralph";
Foo b = new Foo();
a.CopyPropertiesTo<Foo>(b);
Console.WriteLine(b);
}

在您的情况下,如果您只想复制一组接口(interface)属性,您可以这样做:

((IAddress)home).CopyPropertiesTo<IAddress>(b);

关于c# - c#中的接口(interface)属性复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1272871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com