Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 您能自动生成代码来分配C中对象的属性吗?(Visual Studio)_C#_Visual Studio_Properties_Autocomplete - Fatal编程技术网

C# 您能自动生成代码来分配C中对象的属性吗?(Visual Studio)

C# 您能自动生成代码来分配C中对象的属性吗?(Visual Studio),c#,visual-studio,properties,autocomplete,C#,Visual Studio,Properties,Autocomplete,示例:我正在使用一个API,该API为具有许多属性的各种对象定义 这个对象有大约40个属性,我想全部设置它们 有没有办法从对象自动生成以下代码 contact.AddressId = null; contact.Anniversary = null; contact.AssistantId = null; contact.BirthDay = null; contact.Children = null; contact.CompanyAddressInfo = null; contact.Com

示例:我正在使用一个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);
    }

然后复制粘贴控制台屏幕或将其写入文件。

不是您真正想要的,而是重复contact.Property1、contact.Property2您可以使用对象初始值设定项:

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

    // ... others fields
}
因此,我使用创建了一个方法,该方法接受一个对象和一个名称,并以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来完成这项工作。

它已经存在多年了,但我现在发布它,因为我偶然发现了它,现在有了一个解决方案。 如果您使用的是ReSharper,则可以使用对象的初始值设定项

var contact = new Contact()
{

};
在初始值设定项的括号内,您将看到Resharper的灯泡。单击它,您可以选择初始化成员。您将把所有属性初始化为其类型的默认值,然后可以从那里继续,更改所需的属性。
如果初始值设定项不符合您的需要,您甚至可以选择所有这些语句并将它们提取到简单的赋值语句中

没有什么特别的,即使是占位符注释也可以。我只是想寻找一种方法,将所有属性枚举到我可以使用的代码中。不是内置的,尽管我想你可能可以通过自定义代码段来完成。如果你没有特定的值,它们将被设置为默认值,比如0/null。对,null实际上很好,这真的只是一件方便的事情,可以为我安排好它,这样我就可以在必要时开始分配变量了。如果属性是引用类型,那么它们都会自动初始化为null。你不必写任何代码。很好的建议,但不是我想要的。这需要我手动键入联系人类中的所有属性。不,您不需要重写联系人类。这仅在该示例中有用。您已经在一些API中使用了该类,obj.GetType.GetProperties调用将为您提供所有属性。我对获取属性没有任何问题,因为Intellisense让这变得轻而易举。这个问题是获取这些属性并为每个属性生成分配代码,这样我就可以开始将它们分配给我先前存在的代码中包含的各种变量和值。obj.GetType.GetProperties在运行时获取属性列表,p.SetValueobj,初始化器执行分配。如果您有特殊情况或按类型等,您也可以按属性名称进行筛选。Jonathan,您在这方面做得对。我已经创建了一些扩展您所写内容的东西,我将立即发布。我想这会有所帮助,但并不能真正解决我的问题,即必须对来自API的多个类执行此操作。我试图避免键入定义这些类的40个属性中的每一个。对,我正在寻找一种方法,在这里使用空值或任何占位符自动生成此代码。如果您有意省略某些属性,它将按默认值初始化。特别是引用类型为空。现在您需要做的就是将其包装到基于Roslyn的加载项中,并将其集成到IDE中。遗憾的是,这个答案被发布并接受,而不是将其归功于引入核心概念的加载项。将代码包装在ObjectGenerateNullValues方法中是一个肤浅的变化。唯一的其他区别是使用StreamWriter,这实际上使此代码不如Console.WriteLine灵活;这将允许您直接从控制台窗口复制,或者使用redirection>将任何文件写入文件-1因为这两个变化都不需要新的答案。
var contact = new Contact()
{

};