你能在c#中自动生成分配对象属性的代码吗?(Visual Studio)
本文关键字:代码 Visual Studio 属性 自动生成 对象 分配 | 更新日期: 2023-09-27 18:13:15
示例:我正在使用一个API,该API具有具有许多属性的各种对象的定义。
这个对象大约有40个属性,我想设置它们。
是否有一种方法可以从对象自动生成以下代码?
contact.AddressId = null;
contact.Anniversary = null;
contact.AssistantId = null;
contact.BirthDay = null;
contact.Children = null;
contact.CompanyAddressInfo = null;
contact.CompanyIdentifier = null;
contact.DisablePortalLogin = null;
contact.Email = null;
contact.Emails = null;
contact.ExtensionData = null;
contact.Fax = null;
contact.Faxes = null;
contact.FaxExt = null;
contact.FirstName = null;
contact.Gender = null;
contact.Id = null;
contact.Inactive = null;
contact.LastName = null;
contact.LastUpdated = null;
contact.ManagerId = null;
contact.Married = null;
contact.NickName = null;
contact.PersonalAddress = null;
contact.PersonalAddressFlag = null;
contact.Phone = null;
contact.PhoneExt = null;
contact.Phones = null;
contact.PortalPassword = null;
contact.PortalSecurityLevel = null;
contact.Relationship = null;
contact.School = null;
contact.SID = null;
contact.SignificantOther = null;
contact.SiteName = null;
contact.Title = null;
contact.Type = null;
contact.UnsubscribeFlag = null;
contact.UpdatedBy = null;
目的是为了可视化,让我看到我在代码中设置了什么,没有设置什么。
试试这个
static void Main(string[] args)
{
Contact obj = new Contact();
var props = obj.GetType().GetProperties();
foreach (var p in props)
Console.WriteLine("contact.{0}= null;", p.Name);
Thread.Sleep(1000);
}
然后复制粘贴控制台屏幕或将其写入文件
它已经有几年的历史了,但是我在偶然发现它之后发布了这个,目前有一个解决方案。如果你正在使用ReSharper,你可以使用对象的初始化器。
var contact = new Contact()
{
};
在初始化器的括号内,你会得到Resharper的"灯泡"。点击它,你可以选择"初始化成员"。你会让所有属性初始化为它们类型的默认值你可以从那里继续,改变那些你想要的。如果初始化器不适合您的需要,您甚至可以选择所有这些并将它们提取到简单的赋值语句中
创建一个Visual Studio代码片段,替换为:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippet Format="1.0.0"
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<Header>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>AddressId</ID>
<ToolTip>Enter Address</ToolTip>
<Default>Address</Default>
</Literal>
<Literal>
<ID>Anniversary</ID>
<ToolTip>Enter Anniversary</ToolTip>
<Default>Anniversary</Default>
</Literal>
</Declarations>
<Code Language="CSharp">
<![CDATA[contact.AddressId = $AddressId$;
contact.Anniversary = $Anniversary$;]]></Code>
</Snippet>
</CodeSnippet>
不是你真正想要的,但是你可以使用对象初始化器来代替重复的contact.Property1, contact.Property2
:
var contact = new Contact
{
AddressId = foo1,
Anniversary = foo2,
AssistantId = foo3,
BirthDay = foo4,
Children = foo5,
CompanyAddressInfo = foo6,
// ... others fields
}
因此,使用Jonathan的回答,我创建了一个方法,该方法接受一个对象和一个名称,并以null
作为占位符吐出所有属性,如问题所示:
static void Main(string[] args)
{
ObjectGenerateNullValues(new Contact(), "contact");
}
private static void ObjectGenerateNullValues(object objectType, string objectName)
{
var props = objectType.GetType().GetProperties();
using (StreamWriter sw = new StreamWriter(@"c:'temp'ObjectPropertiesOutput.txt", true))
{
foreach (var p in props)
{
sw.WriteLine("{0}.{1} = null", objectName, p.Name);
}
}
}
在我继续探索这些api时,我想我应该编写一个轻量级的GUI来为我做这些。