简体   繁体   中英

Can you auto-generate code for assigning properties of an object in C#? (Visual Studio)

Example: I am working with an API that has definitions for various objects with many properties.

This object has about 40 properties, and I'd like to set them all.

Is there a way to auto-generate the following code from an object?

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;

The purpose is for visualization and for me to see what I am and am not setting in my code.

Edited to be more specific.

Create a Visual Studio Snippet with replacements :

<?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>

Try this

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

Then copy paste the console screen or write it to a file instead.

Not what you actually want but instead of repeating contact.Property1, contact.Property2 you can use object initializer:

var contact = new Contact
{
    AddressId = foo1,
    Anniversary = foo2,
    AssistantId = foo3,
    BirthDay = foo4,
    Children = foo5,
    CompanyAddressInfo = foo6,

    // ... others fields
}

So using Jonathan's answer I've created a method that accepts an object and a name, and spits out all properties with null as a placeholder, as shown in the question:

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

I suppose I shall write a little lightweight GUI to do this for me as I continue to explore these APIs.

It's been years old but I am posting this since I stumbled upon it and currently there's a solution. If you are using ReSharper, you can use the object's initializer.

var contact = new Contact()
{

};

While inside the brackets of the initializer, you'll get the Resharper's "light bulb". Clicking on it, you are offered the option to "Initialize members". You'll get all properties initialized to their type's default value and you can go on from there, changing those you want. You can even select all of them and extract them into simple assignment statements if the initializer doen't fit your needs

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM