gpt4 book ai didi

c# - c# 中是否有 jQuery 扩展?

转载 作者:行者123 更新时间:2023-11-30 13:30:54 24 4
gpt4 key购买 nike

 var _Contact = new ContactLstModel { 
ContactName="xxxxxx",
EmailAddr="yyyyyy",
ContactNo="ddddddd",
SelectedContactType="dddd"
};

var _ContactOption= new ContactLstModel{
ContactType= new List<SelectListItem>(){
new SelectListItem{
Text="sss",Value="ddd"
}
}
};

如您所见,两者都属于同一模型 ContactLstModel。现在如何将两者合而为一?

就像在 jQuery 中一样,我们有 $.extend(dest,source);

C# 中是否有等效项?

最佳答案

在 C# 和 .NET 4.5 中没有内置的 $.extend 等价物。

然而,您可以找到许多人试图使用 reflection 实现这种行为的例子。在.NET 中。还有其他人使用序列化(JSON.NET 等)来实现类似的行为。另一种方法是使用像 Automapper 这样的 IOC 容器。 .

这是一个示例,说明如何使用 Automapper 将您的第一个对象合并到第二个对象中国际奥委会:

var expr = Mapper.CreateMap<ContactLstModel, ContactLstModel>().ForMember("ContactType", (conf) => { conf.Ignore(); });
var merged = Mapper.Map<ContactLstModel, ContactLstModel>(_Contact, _ContactOption);

使用 Automapper,您可以控制如何将每个属性从源映射到目标。

如果您不想依赖外部库,并且想要完全控制,您可以使用纯反射方法。

例如,您可以使用与此 link 中的 CopyValues 方法类似的方法并使用反射将第二个对象属性与第一个对象属性合并。

CopyValues<ContactLstModel>(_Contact, _ContactOption);

所以这行代码会将 ContactType 属性值从第二个对象复制到第一个对象中。

CopyValues 使用反射来遍历对象的属性:

public static void CopyValues<T>(T target, T source)
{
Type t = typeof(T);

var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

foreach (var prop in properties)
{
var value = prop.GetValue(source, null);
if (value != null)
prop.SetValue(target, value, null);
}
}

当然这并不支持 jquery extend 所做的一切(合并、浅层和深度克隆到新对象等),但它可以满足您当前的需求。您可以扩展这些原则并构建更全面的解决方案。

但是请记住,C# 不是像 Javascript 这样的语言,在 C# 中进行反射的成本要高得多,而在 Javascript 中,原型(prototype)的属性可以用便宜的 for-in 列出。迭代,或调用 Object.keys()。

关于c# - c# 中是否有 jQuery 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156577/

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